{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Challenges of Expedia\n",
    "\n",
    "### Description \n",
    "\n",
    "Planning your dream vacation, or even a weekend escape, can be an overwhelming affair. With hundreds, even thousands, of hotels to choose from at every destination, it's difficult to know which will suit your personal preferences. Should you go with an old standby with those pillow mints you like, or risk a new hotel with a trendy pool bar? \n",
    " \n",
    "Expedia wants to take the proverbial rabbit hole out of hotel search by providing personalized hotel recommendations to their users. This is no small task for a site with hundreds of millions of visitors every month!\n",
    "\n",
    "Currently, Expedia uses search parameters to adjust their hotel recommendations, but there aren't enough customer specific data to personalize them for each user. In this competition, Expedia is challenging Kagglers to contextualize customer data and predict the likelihood a user will stay at 100 different hotel groups.\n",
    "The data in this competition is a random selection from Expedia and is not representative of the overall statistics. \n",
    "\n",
    "https://www.kaggle.com/c/expedia-hotel-recommendations\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import random\n",
    "import datetime\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import statistics\n",
    "import numpy as np\n",
    "import scipy\n",
    "from scipy import stats\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Python libraries:¶\n",
    "\n",
    "random, datetime for common language program function\n",
    "\n",
    "pandas for data file or database manilpulation\n",
    "\n",
    "seaborn for data visulation\n",
    "\n",
    "statistics, numpy and scipy are for statistical and mathematical formula/function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "753406\n"
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "             date_time  site_name  posa_continent  user_location_country  \\\n0  2013-10-29 09:25:27         34               3                    205   \n1  2014-07-06 00:17:02          2               3                     66   \n2  2014-07-12 19:02:33         11               3                    205   \n3  2014-03-12 08:32:59          2               3                     66   \n4  2013-11-03 22:15:17          2               3                    231   \n\n   user_location_region  user_location_city  orig_destination_distance  \\\n0                   354                1666                        NaN   \n1                   174                8124                  5538.8566   \n2                   343               37594                   346.1719   \n3                   435               40631                     4.8720   \n4                    70               11644                        NaN   \n\n   user_id  is_mobile  is_package  ...  srch_children_cnt srch_rm_cnt  \\\n0   313095          0           0  ...                  0           1   \n1   628718          0           1  ...                  1           1   \n2  1064708          0           0  ...                  0           1   \n3   285636          0           0  ...                  0           1   \n4   183708          0           0  ...                  0           2   \n\n  srch_destination_id  srch_destination_type_id  is_booking  cnt  \\\n0               14875                         1           0    1   \n1                8747                         1           1    1   \n2               25544                         6           0    1   \n3               12364                         5           0    1   \n4                1833                         6           1    1   \n\n   hotel_continent  hotel_country  hotel_market  hotel_cluster  \n0                2            198           750             98  \n1                3            106           107             25  \n2                2             50          1094             35  \n3                2             50           647             39  \n4                3             99          1225             82  \n\n[5 rows x 24 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>date_time</th>\n      <th>site_name</th>\n      <th>posa_continent</th>\n      <th>user_location_country</th>\n      <th>user_location_region</th>\n      <th>user_location_city</th>\n      <th>orig_destination_distance</th>\n      <th>user_id</th>\n      <th>is_mobile</th>\n      <th>is_package</th>\n      <th>...</th>\n      <th>srch_children_cnt</th>\n      <th>srch_rm_cnt</th>\n      <th>srch_destination_id</th>\n      <th>srch_destination_type_id</th>\n      <th>is_booking</th>\n      <th>cnt</th>\n      <th>hotel_continent</th>\n      <th>hotel_country</th>\n      <th>hotel_market</th>\n      <th>hotel_cluster</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>2013-10-29 09:25:27</td>\n      <td>34</td>\n      <td>3</td>\n      <td>205</td>\n      <td>354</td>\n      <td>1666</td>\n      <td>NaN</td>\n      <td>313095</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>14875</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2</td>\n      <td>198</td>\n      <td>750</td>\n      <td>98</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>2014-07-06 00:17:02</td>\n      <td>2</td>\n      <td>3</td>\n      <td>66</td>\n      <td>174</td>\n      <td>8124</td>\n      <td>5538.8566</td>\n      <td>628718</td>\n      <td>0</td>\n      <td>1</td>\n      <td>...</td>\n      <td>1</td>\n      <td>1</td>\n      <td>8747</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>106</td>\n      <td>107</td>\n      <td>25</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>2014-07-12 19:02:33</td>\n      <td>11</td>\n      <td>3</td>\n      <td>205</td>\n      <td>343</td>\n      <td>37594</td>\n      <td>346.1719</td>\n      <td>1064708</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>25544</td>\n      <td>6</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2</td>\n      <td>50</td>\n      <td>1094</td>\n      <td>35</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>2014-03-12 08:32:59</td>\n      <td>2</td>\n      <td>3</td>\n      <td>66</td>\n      <td>435</td>\n      <td>40631</td>\n      <td>4.8720</td>\n      <td>285636</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>12364</td>\n      <td>5</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2</td>\n      <td>50</td>\n      <td>647</td>\n      <td>39</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>2013-11-03 22:15:17</td>\n      <td>2</td>\n      <td>3</td>\n      <td>231</td>\n      <td>70</td>\n      <td>11644</td>\n      <td>NaN</td>\n      <td>183708</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>2</td>\n      <td>1833</td>\n      <td>6</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>99</td>\n      <td>1225</td>\n      <td>82</td>\n    </tr>\n  </tbody>\n</table>\n<p>5 rows × 24 columns</p>\n</div>"
     },
     "metadata": {},
     "execution_count": 2
    }
   ],
   "source": [
    "train = pd.read_csv('train_hotel.csv')\n",
    "print(len(train))\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "75341\n"
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "             date_time  site_name  posa_continent  user_location_country  \\\n0  2014-12-24 20:46:46         11               3                    205   \n1  2014-08-21 22:26:53         35               2                     70   \n2  2014-11-07 16:39:11          2               3                     66   \n3  2013-05-21 14:55:31          2               3                     66   \n4  2014-05-09 21:06:57          2               3                     66   \n\n   user_location_region  user_location_city  orig_destination_distance  \\\n0                   155               22091                   255.1211   \n1                    47               14566                        NaN   \n2                   314               42397                  1381.9537   \n3                   174               24103                  2344.6109   \n4                   348                3043                   264.9415   \n\n   user_id  is_mobile  is_package  ...  srch_children_cnt srch_rm_cnt  \\\n0   618188          0           0  ...                  3           2   \n1   395190          0           0  ...                  0           1   \n2   545494          0           0  ...                  2           1   \n3    78437          0           1  ...                  1           1   \n4   322453          0           0  ...                  0           1   \n\n  srch_destination_id  srch_destination_type_id  is_booking  cnt  \\\n0                8273                         1           0    1   \n1                 347                         1           0    1   \n2                8277                         1           0    1   \n3                8260                         1           0    1   \n4               12236                         6           0    1   \n\n   hotel_continent  hotel_country  hotel_market  hotel_cluster  \n0                2             50           660             18  \n1                3            182            52             12  \n2                2             50           412             91  \n3                2             50           701             33  \n4                2             50           676             33  \n\n[5 rows x 24 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>date_time</th>\n      <th>site_name</th>\n      <th>posa_continent</th>\n      <th>user_location_country</th>\n      <th>user_location_region</th>\n      <th>user_location_city</th>\n      <th>orig_destination_distance</th>\n      <th>user_id</th>\n      <th>is_mobile</th>\n      <th>is_package</th>\n      <th>...</th>\n      <th>srch_children_cnt</th>\n      <th>srch_rm_cnt</th>\n      <th>srch_destination_id</th>\n      <th>srch_destination_type_id</th>\n      <th>is_booking</th>\n      <th>cnt</th>\n      <th>hotel_continent</th>\n      <th>hotel_country</th>\n      <th>hotel_market</th>\n      <th>hotel_cluster</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>2014-12-24 20:46:46</td>\n      <td>11</td>\n      <td>3</td>\n      <td>205</td>\n      <td>155</td>\n      <td>22091</td>\n      <td>255.1211</td>\n      <td>618188</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>3</td>\n      <td>2</td>\n      <td>8273</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2</td>\n      <td>50</td>\n      <td>660</td>\n      <td>18</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>2014-08-21 22:26:53</td>\n      <td>35</td>\n      <td>2</td>\n      <td>70</td>\n      <td>47</td>\n      <td>14566</td>\n      <td>NaN</td>\n      <td>395190</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>347</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>3</td>\n      <td>182</td>\n      <td>52</td>\n      <td>12</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>2014-11-07 16:39:11</td>\n      <td>2</td>\n      <td>3</td>\n      <td>66</td>\n      <td>314</td>\n      <td>42397</td>\n      <td>1381.9537</td>\n      <td>545494</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>2</td>\n      <td>1</td>\n      <td>8277</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2</td>\n      <td>50</td>\n      <td>412</td>\n      <td>91</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>2013-05-21 14:55:31</td>\n      <td>2</td>\n      <td>3</td>\n      <td>66</td>\n      <td>174</td>\n      <td>24103</td>\n      <td>2344.6109</td>\n      <td>78437</td>\n      <td>0</td>\n      <td>1</td>\n      <td>...</td>\n      <td>1</td>\n      <td>1</td>\n      <td>8260</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2</td>\n      <td>50</td>\n      <td>701</td>\n      <td>33</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>2014-05-09 21:06:57</td>\n      <td>2</td>\n      <td>3</td>\n      <td>66</td>\n      <td>348</td>\n      <td>3043</td>\n      <td>264.9415</td>\n      <td>322453</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>12236</td>\n      <td>6</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2</td>\n      <td>50</td>\n      <td>676</td>\n      <td>33</td>\n    </tr>\n  </tbody>\n</table>\n<p>5 rows × 24 columns</p>\n</div>"
     },
     "metadata": {},
     "execution_count": 3
    }
   ],
   "source": [
    "test = pd.read_csv('test_hotel.csv')\n",
    "print(len(test))\n",
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "['date_time',\n 'site_name',\n 'posa_continent',\n 'user_location_country',\n 'user_location_region',\n 'user_location_city',\n 'orig_destination_distance',\n 'user_id',\n 'is_mobile',\n 'is_package',\n 'channel',\n 'srch_ci',\n 'srch_co',\n 'srch_adults_cnt',\n 'srch_children_cnt',\n 'srch_rm_cnt',\n 'srch_destination_id',\n 'srch_destination_type_id',\n 'is_booking',\n 'cnt',\n 'hotel_continent',\n 'hotel_country',\n 'hotel_market',\n 'hotel_cluster']"
     },
     "metadata": {},
     "execution_count": 4
    }
   ],
   "source": [
    "list(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "['date_time',\n 'site_name',\n 'posa_continent',\n 'user_location_country',\n 'user_location_region',\n 'user_location_city',\n 'orig_destination_distance',\n 'user_id',\n 'is_mobile',\n 'is_package',\n 'channel',\n 'srch_ci',\n 'srch_co',\n 'srch_adults_cnt',\n 'srch_children_cnt',\n 'srch_rm_cnt',\n 'srch_destination_id',\n 'srch_destination_type_id',\n 'is_booking',\n 'cnt',\n 'hotel_continent',\n 'hotel_country',\n 'hotel_market',\n 'hotel_cluster']"
     },
     "metadata": {},
     "execution_count": 5
    }
   ],
   "source": [
    "list(test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "62106\n"
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "   srch_destination_id        d1        d2        d3        d4        d5  \\\n0                    0 -2.198657 -2.198657 -2.198657 -2.198657 -2.198657   \n1                    1 -2.181690 -2.181690 -2.181690 -2.082564 -2.181690   \n2                    2 -2.183490 -2.224164 -2.224164 -2.189562 -2.105819   \n3                    3 -2.177409 -2.177409 -2.177409 -2.177409 -2.177409   \n4                    4 -2.189562 -2.187783 -2.194008 -2.171153 -2.152303   \n\n         d6        d7        d8        d9  ...      d140      d141      d142  \\\n0 -1.897627 -2.198657 -2.198657 -1.897627  ... -2.198657 -2.198657 -2.198657   \n1 -2.165028 -2.181690 -2.181690 -2.031597  ... -2.165028 -2.181690 -2.165028   \n2 -2.075407 -2.224164 -2.118483 -2.140393  ... -2.224164 -2.224164 -2.196379   \n3 -2.115485 -2.177409 -2.177409 -2.177409  ... -2.161081 -2.177409 -2.177409   \n4 -2.056618 -2.194008 -2.194008 -2.145911  ... -2.187356 -2.194008 -2.191779   \n\n       d143      d144      d145      d146      d147      d148      d149  \n0 -2.198657 -2.198657 -2.198657 -2.198657 -2.198657 -2.198657 -2.198657  \n1 -2.181690 -2.181690 -2.165028 -2.181690 -2.181690 -2.181690 -2.181690  \n2 -2.224164 -2.192009 -2.224164 -2.224164 -2.224164 -2.224164 -2.057548  \n3 -2.177409 -2.177409 -2.177409 -2.177409 -2.177409 -2.177409 -2.177409  \n4 -2.194008 -2.194008 -2.185161 -2.194008 -2.194008 -2.194008 -2.188037  \n\n[5 rows x 150 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>srch_destination_id</th>\n      <th>d1</th>\n      <th>d2</th>\n      <th>d3</th>\n      <th>d4</th>\n      <th>d5</th>\n      <th>d6</th>\n      <th>d7</th>\n      <th>d8</th>\n      <th>d9</th>\n      <th>...</th>\n      <th>d140</th>\n      <th>d141</th>\n      <th>d142</th>\n      <th>d143</th>\n      <th>d144</th>\n      <th>d145</th>\n      <th>d146</th>\n      <th>d147</th>\n      <th>d148</th>\n      <th>d149</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-1.897627</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-1.897627</td>\n      <td>...</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n      <td>-2.198657</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>-2.181690</td>\n      <td>-2.181690</td>\n      <td>-2.181690</td>\n      <td>-2.082564</td>\n      <td>-2.181690</td>\n      <td>-2.165028</td>\n      <td>-2.181690</td>\n      <td>-2.181690</td>\n      <td>-2.031597</td>\n      <td>...</td>\n      <td>-2.165028</td>\n      <td>-2.181690</td>\n      <td>-2.165028</td>\n      <td>-2.181690</td>\n      <td>-2.181690</td>\n      <td>-2.165028</td>\n      <td>-2.181690</td>\n      <td>-2.181690</td>\n      <td>-2.181690</td>\n      <td>-2.181690</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>2</td>\n      <td>-2.183490</td>\n      <td>-2.224164</td>\n      <td>-2.224164</td>\n      <td>-2.189562</td>\n      <td>-2.105819</td>\n      <td>-2.075407</td>\n      <td>-2.224164</td>\n      <td>-2.118483</td>\n      <td>-2.140393</td>\n      <td>...</td>\n      <td>-2.224164</td>\n      <td>-2.224164</td>\n      <td>-2.196379</td>\n      <td>-2.224164</td>\n      <td>-2.192009</td>\n      <td>-2.224164</td>\n      <td>-2.224164</td>\n      <td>-2.224164</td>\n      <td>-2.224164</td>\n      <td>-2.057548</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>3</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>-2.115485</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>...</td>\n      <td>-2.161081</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n      <td>-2.177409</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>4</td>\n      <td>-2.189562</td>\n      <td>-2.187783</td>\n      <td>-2.194008</td>\n      <td>-2.171153</td>\n      <td>-2.152303</td>\n      <td>-2.056618</td>\n      <td>-2.194008</td>\n      <td>-2.194008</td>\n      <td>-2.145911</td>\n      <td>...</td>\n      <td>-2.187356</td>\n      <td>-2.194008</td>\n      <td>-2.191779</td>\n      <td>-2.194008</td>\n      <td>-2.194008</td>\n      <td>-2.185161</td>\n      <td>-2.194008</td>\n      <td>-2.194008</td>\n      <td>-2.194008</td>\n      <td>-2.188037</td>\n    </tr>\n  </tbody>\n</table>\n<p>5 rows × 150 columns</p>\n</div>"
     },
     "metadata": {},
     "execution_count": 6
    }
   ],
   "source": [
    "review = pd.read_csv('destinations.csv')\n",
    "print(len(review))\n",
    "review.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Data description can be found in https://www.kaggle.com/c/expedia-hotel-recommendations/data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. Wrangle with the dataset 1 and select any 4 algorithms, search out the “feature importance” to get the insight to design and conduct your AB test in part 2. The usual step of dividing the train_hotel dataset into a “learning” set and “model testing” set, use the APIs from ski-learn package of python to find the “optimal” model based on your selection criteria of the confusion matrix. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Algorithm 1. Random Forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "tags": [
     "outputPrepend"
    ]
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "0\n0.09504087923870795\n[[0.         0.26445727 0.00196078 ... 0.00392157 0.         0.        ]\n [0.01332598 0.         0.00324324 ... 0.00216216 0.         0.00432432]\n [0.00876248 0.00552147 0.00165391 ... 0.01378276 0.058779   0.00386103]\n ...\n [0.         0.         0.00239044 ... 0.00277778 0.02013368 0.00717131]\n [0.13898825 0.01689655 0.         ... 0.01735506 0.00966275 0.00867753]\n [0.0122449  0.         0.         ... 0.         0.         0.00888889]]\n"
    }
   ],
   "source": [
    "import csv\n",
    "from ml_metrics import mapk\n",
    "\n",
    "def parse_dates(df):\n",
    "    del df['date_time']\n",
    "    del df['srch_ci']\n",
    "    del df['srch_co']\n",
    "    return df\n",
    "\n",
    "\n",
    "def percent2mapk(predict_percent, k):\n",
    "    predict_map = []\n",
    "    for i_row, pred_row in enumerate(predict_percent):\n",
    "        predict_map.append([])\n",
    "        ranked_row = list(stats.rankdata(pred_row, method='ordinal'))\n",
    "        for op_rank in range(k):\n",
    "            predict_map[i_row].append(ranked_row.index(n_classes - op_rank - 1))\n",
    "    return predict_map\n",
    "\n",
    "\n",
    "def list2str(predict_list, join_by):\n",
    "    str_list = []\n",
    "    for predict_result in predict_list:\n",
    "        predict_result = list(map(lambda x: str(x), predict_result))\n",
    "        str_list.append(join_by.join(predict_result))\n",
    "    return str_list\n",
    "\n",
    "\n",
    "def y2list(y_array):\n",
    "    y_list = []\n",
    "    for actual in y_array:\n",
    "        y_list.append([actual])\n",
    "    return y_list\n",
    "\"\"\"\n",
    "Variables\n",
    "\"\"\"\n",
    "# Number of classes\n",
    "n_classes = 100\n",
    "# Sampling rate of the data\n",
    "samp = 100\n",
    "# Number of rows for train\n",
    "n_rows = 1e4\n",
    "# Whether to merge the data\n",
    "merge = False\n",
    "# sampled train filename, None if not required\n",
    "train_file = None\n",
    "classifier = RandomForestClassifier(n_estimators=5, max_depth=10, random_state=42)\n",
    "# size of predicting batch\n",
    "test_batch = 10000\n",
    "\"\"\"\n",
    "Read data\n",
    "\"\"\"\n",
    "# Read destinations\n",
    "# destinations = pd.DataFrame.from_csv('./destinations.csv')\n",
    "destinations = pd.read_csv('./destinations.csv')\n",
    "\n",
    "# Read and sample train\n",
    "train_rows = 0\n",
    "with open('./train_hotel.csv', newline='') as csvfile:\n",
    "    spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')\n",
    "    columns = spamreader.__next__()\n",
    "    # print('Read the train table columns')\n",
    "    train_samp = []\n",
    "    for i, row in enumerate(spamreader):\n",
    "        if i % samp == 0:\n",
    "            train_samp.append(row)\n",
    "            train_rows += 1\n",
    "            if train_rows == n_rows:\n",
    "                break\n",
    "        if i % 1e6 == 0:\n",
    "            print(i)\n",
    "csvfile.close()\n",
    "\n",
    "# build pandas Dataframe\n",
    "train_samp = pd.DataFrame(train_samp, columns=columns)\n",
    "train_samp.index = train_samp.user_id\n",
    "train_samp.hotel_cluster = train_samp.hotel_cluster.astype(int)\n",
    "\n",
    "# Merge\n",
    "if merge:\n",
    "    train_samp = pd.merge(train_samp, destinations, left_on=train_samp.srch_destination_id.values.astype(int),\n",
    "                          right_on=destinations.index.values, how='left')\n",
    "\n",
    "# Export train file\n",
    "if train_file:\n",
    "    train_samp.to_csv(train_file)\n",
    "\n",
    "# Separate X_train and y_train\n",
    "target = train_samp.hotel_cluster\n",
    "\n",
    "# Removing excess columns in train\n",
    "del train_samp['hotel_cluster']\n",
    "del train_samp['cnt']\n",
    "del train_samp['is_booking']\n",
    "\n",
    "# Read test\n",
    "test = pd.read_csv('./test_hotel.csv')\n",
    "\n",
    "\"\"\"\n",
    "Feature engineering\n",
    "\"\"\"\n",
    "del train_samp['user_id']\n",
    "del test['user_id']\n",
    "\n",
    "# Change NaN dates to '1970-01-01'\n",
    "train_samp[['date_time', 'srch_ci', 'srch_co']] = train_samp[['date_time','srch_ci', 'srch_co']].replace('', '1970-01-01')\n",
    "\n",
    "test[['date_time', 'srch_ci', 'srch_co']] = test[['date_time', 'srch_ci', 'srch_co']].replace('', '1970-01-01')\n",
    "\n",
    "# Remove NaNs\n",
    "train_samp = train_samp.replace('', '9999')\n",
    "test = test.replace('', '9999')\n",
    "train_samp = train_samp.fillna(9999)\n",
    "test = test.fillna(9999)\n",
    "\n",
    "# Parse date\n",
    "train_samp = parse_dates(train_samp)\n",
    "test = parse_dates(test)\n",
    "\n",
    "# Debug printing\n",
    "# print(train_samp.columns.values)\n",
    "\n",
    "\"\"\"\n",
    "MLing, CV\n",
    "\"\"\"\n",
    "X_train, X_test, y_train, y_test = train_test_split(train_samp.values, target.values, test_size=0.33, random_state=42)\n",
    "classifier.fit(X_train, y_train)\n",
    "train_predict_prob = np.zeros((X_test.shape[0], n_classes))\n",
    "for batch_i in np.arange(0, X_test.shape[0], test_batch):\n",
    "    if (batch_i + test_batch) < X_test.shape[0]:\n",
    "        train_predict_prob[batch_i: batch_i + test_batch, : ] = classifier.predict_proba(X_test[batch_i: batch_i + test_batch, :])\n",
    "    else:\n",
    "        train_predict_prob[batch_i:, :] = classifier.predict_proba(X_test[batch_i:, :])\n",
    "\n",
    "train_predict_map = percent2mapk(train_predict_prob, 5)\n",
    "y_test_list = y2list(y_test)\n",
    "print(mapk(y_test_list, train_predict_map, k=5))\n",
    "train_predict_str = list2str(train_predict_map, ' ')\n",
    "print(train_predict_prob)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Algorithm 2. Bootstrap"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "             date_time  site_name  posa_continent  user_location_country  \\\n0  2013-04-14 18:16:20          2               3                     66   \n1  2014-11-07 11:54:35          2               3                     66   \n2  2013-09-02 10:59:42          2               3                     66   \n3  2013-07-03 09:40:55          2               3                     66   \n4  2014-09-01 22:38:45         37               1                     69   \n\n   user_location_region  user_location_city  orig_destination_distance  \\\n0                   363               33371                        NaN   \n1                   174               26232                  2409.0007   \n2                   314                4868                  4832.8803   \n3                   403               46897                  4784.5552   \n4                   965               50820                        NaN   \n\n   user_id  is_mobile  is_package  ...  srch_children_cnt srch_rm_cnt  \\\n0   522263          0           0  ...                  3           1   \n1   708552          0           1  ...                  0           1   \n2   906633          0           0  ...                  0           1   \n3   256849          0           0  ...                  0           1   \n4   859734          0           0  ...                  0           1   \n\n  srch_destination_id  srch_destination_type_id  is_booking  cnt  \\\n0               12603                         5           0    1   \n1                8791                         1           0    1   \n2               19776                         6           0    1   \n3                8746                         1           0    1   \n4                8213                         1           0    1   \n\n   hotel_continent  hotel_country  hotel_market  hotel_cluster  \n0                2             50           365             72  \n1                4              8           110             66  \n2                2             50           212              0  \n3                6            105            29             16  \n4                6             68           275              5  \n\n[5 rows x 24 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>date_time</th>\n      <th>site_name</th>\n      <th>posa_continent</th>\n      <th>user_location_country</th>\n      <th>user_location_region</th>\n      <th>user_location_city</th>\n      <th>orig_destination_distance</th>\n      <th>user_id</th>\n      <th>is_mobile</th>\n      <th>is_package</th>\n      <th>...</th>\n      <th>srch_children_cnt</th>\n      <th>srch_rm_cnt</th>\n      <th>srch_destination_id</th>\n      <th>srch_destination_type_id</th>\n      <th>is_booking</th>\n      <th>cnt</th>\n      <th>hotel_continent</th>\n      <th>hotel_country</th>\n      <th>hotel_market</th>\n      <th>hotel_cluster</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>2013-04-14 18:16:20</td>\n      <td>2</td>\n      <td>3</td>\n      <td>66</td>\n      <td>363</td>\n      <td>33371</td>\n      <td>NaN</td>\n      <td>522263</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>3</td>\n      <td>1</td>\n      <td>12603</td>\n      <td>5</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2</td>\n      <td>50</td>\n      <td>365</td>\n      <td>72</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>2014-11-07 11:54:35</td>\n      <td>2</td>\n      <td>3</td>\n      <td>66</td>\n      <td>174</td>\n      <td>26232</td>\n      <td>2409.0007</td>\n      <td>708552</td>\n      <td>0</td>\n      <td>1</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>8791</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>4</td>\n      <td>8</td>\n      <td>110</td>\n      <td>66</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>2013-09-02 10:59:42</td>\n      <td>2</td>\n      <td>3</td>\n      <td>66</td>\n      <td>314</td>\n      <td>4868</td>\n      <td>4832.8803</td>\n      <td>906633</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>19776</td>\n      <td>6</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2</td>\n      <td>50</td>\n      <td>212</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>2013-07-03 09:40:55</td>\n      <td>2</td>\n      <td>3</td>\n      <td>66</td>\n      <td>403</td>\n      <td>46897</td>\n      <td>4784.5552</td>\n      <td>256849</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>8746</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>6</td>\n      <td>105</td>\n      <td>29</td>\n      <td>16</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>2014-09-01 22:38:45</td>\n      <td>37</td>\n      <td>1</td>\n      <td>69</td>\n      <td>965</td>\n      <td>50820</td>\n      <td>NaN</td>\n      <td>859734</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>8213</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>6</td>\n      <td>68</td>\n      <td>275</td>\n      <td>5</td>\n    </tr>\n  </tbody>\n</table>\n<p>5 rows × 24 columns</p>\n</div>"
     },
     "metadata": {},
     "execution_count": 59
    }
   ],
   "source": [
    "import random\n",
    "from random import randint\n",
    " \n",
    "oldf=open('./test_hotel.csv','r',encoding='UTF-8')\n",
    "newf=open('./new_choose.csv','w',encoding='UTF-8')\n",
    "n = 0\n",
    "# delete duplicates\n",
    "resultList = random.sample(range(1,75342),6000)\n",
    "lines=oldf.readlines()\n",
    "newf.write(lines[0])\n",
    "for i in resultList:\n",
    "    newf.write(lines[i])\n",
    "    \n",
    "oldf.close()\n",
    "newf.close()\n",
    "meta_data=pd.read_csv('./new_choose.csv')\n",
    "meta_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "           date_time  site_name  posa_continent  user_location_country  \\\nis_mobile                                                                \n0               5189       5189            5189                   5189   \n1                811        811             811                    811   \n\n           user_location_region  user_location_city  \\\nis_mobile                                             \n0                          5189                5189   \n1                           811                 811   \n\n           orig_destination_distance  user_id  is_package  channel  ...  \\\nis_mobile                                                           ...   \n0                               3338     5189        5189     5189  ...   \n1                                551      811         811      811  ...   \n\n           srch_children_cnt  srch_rm_cnt  srch_destination_id  \\\nis_mobile                                                        \n0                       5189         5189                 5189   \n1                        811          811                  811   \n\n           srch_destination_type_id  is_booking   cnt  hotel_continent  \\\nis_mobile                                                                \n0                              5189        5189  5189             5189   \n1                               811         811   811              811   \n\n           hotel_country  hotel_market  hotel_cluster  \nis_mobile                                              \n0                   5189          5189           5189  \n1                    811           811            811  \n\n[2 rows x 23 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>date_time</th>\n      <th>site_name</th>\n      <th>posa_continent</th>\n      <th>user_location_country</th>\n      <th>user_location_region</th>\n      <th>user_location_city</th>\n      <th>orig_destination_distance</th>\n      <th>user_id</th>\n      <th>is_package</th>\n      <th>channel</th>\n      <th>...</th>\n      <th>srch_children_cnt</th>\n      <th>srch_rm_cnt</th>\n      <th>srch_destination_id</th>\n      <th>srch_destination_type_id</th>\n      <th>is_booking</th>\n      <th>cnt</th>\n      <th>hotel_continent</th>\n      <th>hotel_country</th>\n      <th>hotel_market</th>\n      <th>hotel_cluster</th>\n    </tr>\n    <tr>\n      <th>is_mobile</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>3338</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>...</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n      <td>5189</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n      <td>551</td>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n      <td>...</td>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n      <td>811</td>\n    </tr>\n  </tbody>\n</table>\n<p>2 rows × 23 columns</p>\n</div>"
     },
     "metadata": {},
     "execution_count": 61
    }
   ],
   "source": [
    "meta_data.groupby('is_mobile').count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "is_mobile\n0    0.242821\n1    0.309494\nName: is_package, dtype: float64"
     },
     "metadata": {},
     "execution_count": 62
    }
   ],
   "source": [
    "meta_data.groupby('is_mobile')['is_package'].mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "use `is_package` for target variable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "<matplotlib.axes._subplots.AxesSubplot at 0x121471070>"
     },
     "metadata": {},
     "execution_count": 63
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"248.518125pt\" version=\"1.1\" viewBox=\"0 0 382.603125 248.518125\" width=\"382.603125pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <defs>\n  <style type=\"text/css\">\n*{stroke-linecap:butt;stroke-linejoin:round;}\n  </style>\n </defs>\n <g id=\"figure_1\">\n  <g id=\"patch_1\">\n   <path d=\"M 0 248.518125 \nL 382.603125 248.518125 \nL 382.603125 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n  </g>\n  <g id=\"axes_1\">\n   <g id=\"patch_2\">\n    <path d=\"M 40.603125 224.64 \nL 375.403125 224.64 \nL 375.403125 7.2 \nL 40.603125 7.2 \nz\n\" style=\"fill:#ffffff;\"/>\n   </g>\n   <g id=\"matplotlib.axis_1\">\n    <g id=\"xtick_1\">\n     <g id=\"line2d_1\">\n      <defs>\n       <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"mb3aae43196\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"53.207695\" xlink:href=\"#mb3aae43196\" y=\"224.64\"/>\n      </g>\n     </g>\n     <g id=\"text_1\">\n      <!-- 0.20 -->\n      <defs>\n       <path d=\"M 31.78125 66.40625 \nQ 24.171875 66.40625 20.328125 58.90625 \nQ 16.5 51.421875 16.5 36.375 \nQ 16.5 21.390625 20.328125 13.890625 \nQ 24.171875 6.390625 31.78125 6.390625 \nQ 39.453125 6.390625 43.28125 13.890625 \nQ 47.125 21.390625 47.125 36.375 \nQ 47.125 51.421875 43.28125 58.90625 \nQ 39.453125 66.40625 31.78125 66.40625 \nz\nM 31.78125 74.21875 \nQ 44.046875 74.21875 50.515625 64.515625 \nQ 56.984375 54.828125 56.984375 36.375 \nQ 56.984375 17.96875 50.515625 8.265625 \nQ 44.046875 -1.421875 31.78125 -1.421875 \nQ 19.53125 -1.421875 13.0625 8.265625 \nQ 6.59375 17.96875 6.59375 36.375 \nQ 6.59375 54.828125 13.0625 64.515625 \nQ 19.53125 74.21875 31.78125 74.21875 \nz\n\" id=\"DejaVuSans-48\"/>\n       <path d=\"M 10.6875 12.40625 \nL 21 12.40625 \nL 21 0 \nL 10.6875 0 \nz\n\" id=\"DejaVuSans-46\"/>\n       <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n      </defs>\n      <g transform=\"translate(42.074883 239.238438)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-50\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_2\">\n     <g id=\"line2d_2\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"125.756703\" xlink:href=\"#mb3aae43196\" y=\"224.64\"/>\n      </g>\n     </g>\n     <g id=\"text_2\">\n      <!-- 0.25 -->\n      <defs>\n       <path d=\"M 10.796875 72.90625 \nL 49.515625 72.90625 \nL 49.515625 64.59375 \nL 19.828125 64.59375 \nL 19.828125 46.734375 \nQ 21.96875 47.46875 24.109375 47.828125 \nQ 26.265625 48.1875 28.421875 48.1875 \nQ 40.625 48.1875 47.75 41.5 \nQ 54.890625 34.8125 54.890625 23.390625 \nQ 54.890625 11.625 47.5625 5.09375 \nQ 40.234375 -1.421875 26.90625 -1.421875 \nQ 22.3125 -1.421875 17.546875 -0.640625 \nQ 12.796875 0.140625 7.71875 1.703125 \nL 7.71875 11.625 \nQ 12.109375 9.234375 16.796875 8.0625 \nQ 21.484375 6.890625 26.703125 6.890625 \nQ 35.15625 6.890625 40.078125 11.328125 \nQ 45.015625 15.765625 45.015625 23.390625 \nQ 45.015625 31 40.078125 35.4375 \nQ 35.15625 39.890625 26.703125 39.890625 \nQ 22.75 39.890625 18.8125 39.015625 \nQ 14.890625 38.140625 10.796875 36.28125 \nz\n\" id=\"DejaVuSans-53\"/>\n      </defs>\n      <g transform=\"translate(114.62389 239.238438)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-50\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-53\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_3\">\n     <g id=\"line2d_3\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"198.30571\" xlink:href=\"#mb3aae43196\" y=\"224.64\"/>\n      </g>\n     </g>\n     <g id=\"text_3\">\n      <!-- 0.30 -->\n      <defs>\n       <path d=\"M 40.578125 39.3125 \nQ 47.65625 37.796875 51.625 33 \nQ 55.609375 28.21875 55.609375 21.1875 \nQ 55.609375 10.40625 48.1875 4.484375 \nQ 40.765625 -1.421875 27.09375 -1.421875 \nQ 22.515625 -1.421875 17.65625 -0.515625 \nQ 12.796875 0.390625 7.625 2.203125 \nL 7.625 11.71875 \nQ 11.71875 9.328125 16.59375 8.109375 \nQ 21.484375 6.890625 26.8125 6.890625 \nQ 36.078125 6.890625 40.9375 10.546875 \nQ 45.796875 14.203125 45.796875 21.1875 \nQ 45.796875 27.640625 41.28125 31.265625 \nQ 36.765625 34.90625 28.71875 34.90625 \nL 20.21875 34.90625 \nL 20.21875 43.015625 \nL 29.109375 43.015625 \nQ 36.375 43.015625 40.234375 45.921875 \nQ 44.09375 48.828125 44.09375 54.296875 \nQ 44.09375 59.90625 40.109375 62.90625 \nQ 36.140625 65.921875 28.71875 65.921875 \nQ 24.65625 65.921875 20.015625 65.03125 \nQ 15.375 64.15625 9.8125 62.3125 \nL 9.8125 71.09375 \nQ 15.4375 72.65625 20.34375 73.4375 \nQ 25.25 74.21875 29.59375 74.21875 \nQ 40.828125 74.21875 47.359375 69.109375 \nQ 53.90625 64.015625 53.90625 55.328125 \nQ 53.90625 49.265625 50.4375 45.09375 \nQ 46.96875 40.921875 40.578125 39.3125 \nz\n\" id=\"DejaVuSans-51\"/>\n      </defs>\n      <g transform=\"translate(187.172897 239.238438)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-51\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_4\">\n     <g id=\"line2d_4\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"270.854717\" xlink:href=\"#mb3aae43196\" y=\"224.64\"/>\n      </g>\n     </g>\n     <g id=\"text_4\">\n      <!-- 0.35 -->\n      <g transform=\"translate(259.721904 239.238438)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-51\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-53\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_5\">\n     <g id=\"line2d_5\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"343.403724\" xlink:href=\"#mb3aae43196\" y=\"224.64\"/>\n      </g>\n     </g>\n     <g id=\"text_5\">\n      <!-- 0.40 -->\n      <defs>\n       <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n      </defs>\n      <g transform=\"translate(332.270912 239.238438)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-52\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n   </g>\n   <g id=\"matplotlib.axis_2\">\n    <g id=\"ytick_1\">\n     <g id=\"line2d_6\">\n      <defs>\n       <path d=\"M 0 0 \nL -3.5 0 \n\" id=\"m5653f12331\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m5653f12331\" y=\"214.756364\"/>\n      </g>\n     </g>\n     <g id=\"text_6\">\n      <!-- 0 -->\n      <g transform=\"translate(27.240625 218.555582)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_2\">\n     <g id=\"line2d_7\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m5653f12331\" y=\"184.431167\"/>\n      </g>\n     </g>\n     <g id=\"text_7\">\n      <!-- 10 -->\n      <defs>\n       <path d=\"M 12.40625 8.296875 \nL 28.515625 8.296875 \nL 28.515625 63.921875 \nL 10.984375 60.40625 \nL 10.984375 69.390625 \nL 28.421875 72.90625 \nL 38.28125 72.90625 \nL 38.28125 8.296875 \nL 54.390625 8.296875 \nL 54.390625 0 \nL 12.40625 0 \nz\n\" id=\"DejaVuSans-49\"/>\n      </defs>\n      <g transform=\"translate(20.878125 188.230386)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_3\">\n     <g id=\"line2d_8\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m5653f12331\" y=\"154.105971\"/>\n      </g>\n     </g>\n     <g id=\"text_8\">\n      <!-- 20 -->\n      <g transform=\"translate(20.878125 157.90519)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-50\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_4\">\n     <g id=\"line2d_9\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m5653f12331\" y=\"123.780774\"/>\n      </g>\n     </g>\n     <g id=\"text_9\">\n      <!-- 30 -->\n      <g transform=\"translate(20.878125 127.579993)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-51\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_5\">\n     <g id=\"line2d_10\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m5653f12331\" y=\"93.455578\"/>\n      </g>\n     </g>\n     <g id=\"text_10\">\n      <!-- 40 -->\n      <g transform=\"translate(20.878125 97.254797)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-52\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_6\">\n     <g id=\"line2d_11\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m5653f12331\" y=\"63.130382\"/>\n      </g>\n     </g>\n     <g id=\"text_11\">\n      <!-- 50 -->\n      <g transform=\"translate(20.878125 66.9296)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-53\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_7\">\n     <g id=\"line2d_12\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"40.603125\" xlink:href=\"#m5653f12331\" y=\"32.805185\"/>\n      </g>\n     </g>\n     <g id=\"text_12\">\n      <!-- 60 -->\n      <defs>\n       <path d=\"M 33.015625 40.375 \nQ 26.375 40.375 22.484375 35.828125 \nQ 18.609375 31.296875 18.609375 23.390625 \nQ 18.609375 15.53125 22.484375 10.953125 \nQ 26.375 6.390625 33.015625 6.390625 \nQ 39.65625 6.390625 43.53125 10.953125 \nQ 47.40625 15.53125 47.40625 23.390625 \nQ 47.40625 31.296875 43.53125 35.828125 \nQ 39.65625 40.375 33.015625 40.375 \nz\nM 52.59375 71.296875 \nL 52.59375 62.3125 \nQ 48.875 64.0625 45.09375 64.984375 \nQ 41.3125 65.921875 37.59375 65.921875 \nQ 27.828125 65.921875 22.671875 59.328125 \nQ 17.53125 52.734375 16.796875 39.40625 \nQ 19.671875 43.65625 24.015625 45.921875 \nQ 28.375 48.1875 33.59375 48.1875 \nQ 44.578125 48.1875 50.953125 41.515625 \nQ 57.328125 34.859375 57.328125 23.390625 \nQ 57.328125 12.15625 50.6875 5.359375 \nQ 44.046875 -1.421875 33.015625 -1.421875 \nQ 20.359375 -1.421875 13.671875 8.265625 \nQ 6.984375 17.96875 6.984375 36.375 \nQ 6.984375 53.65625 15.1875 63.9375 \nQ 23.390625 74.21875 37.203125 74.21875 \nQ 40.921875 74.21875 44.703125 73.484375 \nQ 48.484375 72.75 52.59375 71.296875 \nz\n\" id=\"DejaVuSans-54\"/>\n      </defs>\n      <g transform=\"translate(20.878125 36.604404)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-54\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"text_13\">\n     <!-- Density -->\n     <defs>\n      <path d=\"M 19.671875 64.796875 \nL 19.671875 8.109375 \nL 31.59375 8.109375 \nQ 46.6875 8.109375 53.6875 14.9375 \nQ 60.6875 21.78125 60.6875 36.53125 \nQ 60.6875 51.171875 53.6875 57.984375 \nQ 46.6875 64.796875 31.59375 64.796875 \nz\nM 9.8125 72.90625 \nL 30.078125 72.90625 \nQ 51.265625 72.90625 61.171875 64.09375 \nQ 71.09375 55.28125 71.09375 36.53125 \nQ 71.09375 17.671875 61.125 8.828125 \nQ 51.171875 0 30.078125 0 \nL 9.8125 0 \nz\n\" id=\"DejaVuSans-68\"/>\n      <path d=\"M 56.203125 29.59375 \nL 56.203125 25.203125 \nL 14.890625 25.203125 \nQ 15.484375 15.921875 20.484375 11.0625 \nQ 25.484375 6.203125 34.421875 6.203125 \nQ 39.59375 6.203125 44.453125 7.46875 \nQ 49.3125 8.734375 54.109375 11.28125 \nL 54.109375 2.78125 \nQ 49.265625 0.734375 44.1875 -0.34375 \nQ 39.109375 -1.421875 33.890625 -1.421875 \nQ 20.796875 -1.421875 13.15625 6.1875 \nQ 5.515625 13.8125 5.515625 26.8125 \nQ 5.515625 40.234375 12.765625 48.109375 \nQ 20.015625 56 32.328125 56 \nQ 43.359375 56 49.78125 48.890625 \nQ 56.203125 41.796875 56.203125 29.59375 \nz\nM 47.21875 32.234375 \nQ 47.125 39.59375 43.09375 43.984375 \nQ 39.0625 48.390625 32.421875 48.390625 \nQ 24.90625 48.390625 20.390625 44.140625 \nQ 15.875 39.890625 15.1875 32.171875 \nz\n\" id=\"DejaVuSans-101\"/>\n      <path d=\"M 54.890625 33.015625 \nL 54.890625 0 \nL 45.90625 0 \nL 45.90625 32.71875 \nQ 45.90625 40.484375 42.875 44.328125 \nQ 39.84375 48.1875 33.796875 48.1875 \nQ 26.515625 48.1875 22.3125 43.546875 \nQ 18.109375 38.921875 18.109375 30.90625 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.1875 \nQ 21.34375 51.125 25.703125 53.5625 \nQ 30.078125 56 35.796875 56 \nQ 45.21875 56 50.046875 50.171875 \nQ 54.890625 44.34375 54.890625 33.015625 \nz\n\" id=\"DejaVuSans-110\"/>\n      <path d=\"M 44.28125 53.078125 \nL 44.28125 44.578125 \nQ 40.484375 46.53125 36.375 47.5 \nQ 32.28125 48.484375 27.875 48.484375 \nQ 21.1875 48.484375 17.84375 46.4375 \nQ 14.5 44.390625 14.5 40.28125 \nQ 14.5 37.15625 16.890625 35.375 \nQ 19.28125 33.59375 26.515625 31.984375 \nL 29.59375 31.296875 \nQ 39.15625 29.25 43.1875 25.515625 \nQ 47.21875 21.78125 47.21875 15.09375 \nQ 47.21875 7.46875 41.1875 3.015625 \nQ 35.15625 -1.421875 24.609375 -1.421875 \nQ 20.21875 -1.421875 15.453125 -0.5625 \nQ 10.6875 0.296875 5.421875 2 \nL 5.421875 11.28125 \nQ 10.40625 8.6875 15.234375 7.390625 \nQ 20.0625 6.109375 24.8125 6.109375 \nQ 31.15625 6.109375 34.5625 8.28125 \nQ 37.984375 10.453125 37.984375 14.40625 \nQ 37.984375 18.0625 35.515625 20.015625 \nQ 33.0625 21.96875 24.703125 23.78125 \nL 21.578125 24.515625 \nQ 13.234375 26.265625 9.515625 29.90625 \nQ 5.8125 33.546875 5.8125 39.890625 \nQ 5.8125 47.609375 11.28125 51.796875 \nQ 16.75 56 26.8125 56 \nQ 31.78125 56 36.171875 55.265625 \nQ 40.578125 54.546875 44.28125 53.078125 \nz\n\" id=\"DejaVuSans-115\"/>\n      <path d=\"M 9.421875 54.6875 \nL 18.40625 54.6875 \nL 18.40625 0 \nL 9.421875 0 \nz\nM 9.421875 75.984375 \nL 18.40625 75.984375 \nL 18.40625 64.59375 \nL 9.421875 64.59375 \nz\n\" id=\"DejaVuSans-105\"/>\n      <path d=\"M 18.3125 70.21875 \nL 18.3125 54.6875 \nL 36.8125 54.6875 \nL 36.8125 47.703125 \nL 18.3125 47.703125 \nL 18.3125 18.015625 \nQ 18.3125 11.328125 20.140625 9.421875 \nQ 21.96875 7.515625 27.59375 7.515625 \nL 36.8125 7.515625 \nL 36.8125 0 \nL 27.59375 0 \nQ 17.1875 0 13.234375 3.875 \nQ 9.28125 7.765625 9.28125 18.015625 \nL 9.28125 47.703125 \nL 2.6875 47.703125 \nL 2.6875 54.6875 \nL 9.28125 54.6875 \nL 9.28125 70.21875 \nz\n\" id=\"DejaVuSans-116\"/>\n      <path d=\"M 32.171875 -5.078125 \nQ 28.375 -14.84375 24.75 -17.8125 \nQ 21.140625 -20.796875 15.09375 -20.796875 \nL 7.90625 -20.796875 \nL 7.90625 -13.28125 \nL 13.1875 -13.28125 \nQ 16.890625 -13.28125 18.9375 -11.515625 \nQ 21 -9.765625 23.484375 -3.21875 \nL 25.09375 0.875 \nL 2.984375 54.6875 \nL 12.5 54.6875 \nL 29.59375 11.921875 \nL 46.6875 54.6875 \nL 56.203125 54.6875 \nz\n\" id=\"DejaVuSans-121\"/>\n     </defs>\n     <g transform=\"translate(14.798438 134.928594)rotate(-90)scale(0.1 -0.1)\">\n      <use xlink:href=\"#DejaVuSans-68\"/>\n      <use x=\"77.001953\" xlink:href=\"#DejaVuSans-101\"/>\n      <use x=\"138.525391\" xlink:href=\"#DejaVuSans-110\"/>\n      <use x=\"201.904297\" xlink:href=\"#DejaVuSans-115\"/>\n      <use x=\"254.003906\" xlink:href=\"#DejaVuSans-105\"/>\n      <use x=\"281.787109\" xlink:href=\"#DejaVuSans-116\"/>\n      <use x=\"320.996094\" xlink:href=\"#DejaVuSans-121\"/>\n     </g>\n    </g>\n   </g>\n   <g id=\"line2d_13\">\n    <path clip-path=\"url(#p41975ba7e5)\" d=\"M 55.821307 214.756364 \nL 81.191405 214.648041 \nL 82.514017 214.392818 \nL 83.836629 213.895617 \nL 86.000903 213.014577 \nL 86.962802 212.884102 \nL 88.165177 212.972473 \nL 89.848501 213.104161 \nL 90.569925 212.924143 \nL 91.171113 212.539481 \nL 91.7723 211.856902 \nL 92.373487 210.806906 \nL 93.094911 209.002152 \nL 93.936574 206.140126 \nL 94.898473 201.991328 \nL 96.100847 195.798394 \nL 97.663934 186.490276 \nL 98.986546 177.310177 \nL 100.068683 168.234938 \nL 101.15082 157.154616 \nL 102.473431 141.111864 \nL 105.479367 101.118925 \nL 107.162691 75.644509 \nL 108.605541 54.664119 \nL 109.326965 46.818142 \nL 109.928152 42.181104 \nL 110.529339 39.150287 \nL 111.130527 37.272766 \nL 112.573376 33.604521 \nL 113.174563 31.12269 \nL 114.016225 26.439354 \nL 115.218599 19.609118 \nL 115.699549 17.864724 \nL 116.060261 17.1928 \nL 116.300736 17.083636 \nL 116.541211 17.253074 \nL 116.901923 18.01926 \nL 117.382873 19.916824 \nL 117.98406 23.427602 \nL 118.94596 30.732755 \nL 120.148334 41.63684 \nL 121.230471 53.522382 \nL 122.312608 68.129002 \nL 123.755457 91.057162 \nL 126.160206 129.390856 \nL 127.482818 146.949522 \nL 128.685192 160.206289 \nL 129.887566 171.070035 \nL 131.089941 179.871723 \nL 132.292315 187.027849 \nL 133.494689 192.86897 \nL 134.697064 197.610724 \nL 135.899438 201.494062 \nL 136.981575 204.346839 \nL 137.943474 206.284971 \nL 138.785137 207.49783 \nL 139.747036 208.493409 \nL 144.195821 212.383709 \nL 145.63867 213.158065 \nL 147.923182 214.108119 \nL 149.486268 214.529217 \nL 151.049355 214.705939 \nL 154.055291 214.755675 \nL 175.938504 214.756364 \nL 175.938504 214.756364 \n\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n   </g>\n   <g id=\"line2d_14\">\n    <path clip-path=\"url(#p41975ba7e5)\" d=\"M 65.980793 214.756364 \nL 129.003504 214.647566 \nL 133.420983 214.383292 \nL 137.249466 213.936136 \nL 140.78345 213.306428 \nL 144.022935 212.515158 \nL 147.26242 211.49531 \nL 150.207406 210.351436 \nL 153.152393 208.976633 \nL 156.686377 207.062049 \nL 161.398355 204.511814 \nL 167.582827 201.330477 \nL 169.349819 200.030926 \nL 170.822312 198.678274 \nL 172.294805 197.056691 \nL 174.061797 194.764791 \nL 176.123288 191.665538 \nL 178.184778 188.165458 \nL 180.246269 184.272036 \nL 182.307759 179.938125 \nL 184.36925 175.120702 \nL 187.019738 168.309804 \nL 191.437217 156.827626 \nL 193.204209 152.887871 \nL 194.676702 150.110004 \nL 196.149196 147.836217 \nL 197.32719 146.371222 \nL 198.505185 145.192936 \nL 199.977678 144.070526 \nL 201.450171 143.277614 \nL 202.922665 142.768906 \nL 204.395158 142.524605 \nL 205.867651 142.545429 \nL 207.045646 142.75986 \nL 208.518139 143.283174 \nL 209.990632 144.091748 \nL 211.463125 145.175503 \nL 213.230117 146.803439 \nL 215.291608 149.059619 \nL 219.12009 153.716125 \nL 222.359575 157.498427 \nL 225.599061 160.92034 \nL 230.605538 166.182751 \nL 233.256025 169.327186 \nL 235.906513 172.823191 \nL 239.440497 177.892527 \nL 244.446974 185.057429 \nL 255.932421 200.621532 \nL 257.993912 203.097313 \nL 259.760904 204.885142 \nL 261.527896 206.325873 \nL 263.294888 207.447671 \nL 265.356378 208.455938 \nL 268.595863 209.723883 \nL 275.663831 212.234157 \nL 278.314319 212.925314 \nL 280.964807 213.396045 \nL 284.793289 213.820393 \nL 293.628249 214.515478 \nL 298.929224 214.706669 \nL 308.058682 214.755729 \nL 360.184943 214.756364 \nL 360.184943 214.756364 \n\" style=\"fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;\"/>\n   </g>\n   <g id=\"patch_3\">\n    <path d=\"M 40.603125 224.64 \nL 40.603125 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_4\">\n    <path d=\"M 375.403125 224.64 \nL 375.403125 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_5\">\n    <path d=\"M 40.603125 224.64 \nL 375.403125 224.64 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_6\">\n    <path d=\"M 40.603125 7.2 \nL 375.403125 7.2 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"legend_1\">\n    <g id=\"patch_7\">\n     <path d=\"M 317.498437 59.5125 \nL 368.403125 59.5125 \nQ 370.403125 59.5125 370.403125 57.5125 \nL 370.403125 14.2 \nQ 370.403125 12.2 368.403125 12.2 \nL 317.498437 12.2 \nQ 315.498437 12.2 315.498437 14.2 \nL 315.498437 57.5125 \nQ 315.498437 59.5125 317.498437 59.5125 \nz\n\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;\"/>\n    </g>\n    <g id=\"text_14\">\n     <!-- is_mobile -->\n     <defs>\n      <path d=\"M 50.984375 -16.609375 \nL 50.984375 -23.578125 \nL -0.984375 -23.578125 \nL -0.984375 -16.609375 \nz\n\" id=\"DejaVuSans-95\"/>\n      <path d=\"M 52 44.1875 \nQ 55.375 50.25 60.0625 53.125 \nQ 64.75 56 71.09375 56 \nQ 79.640625 56 84.28125 50.015625 \nQ 88.921875 44.046875 88.921875 33.015625 \nL 88.921875 0 \nL 79.890625 0 \nL 79.890625 32.71875 \nQ 79.890625 40.578125 77.09375 44.375 \nQ 74.3125 48.1875 68.609375 48.1875 \nQ 61.625 48.1875 57.5625 43.546875 \nQ 53.515625 38.921875 53.515625 30.90625 \nL 53.515625 0 \nL 44.484375 0 \nL 44.484375 32.71875 \nQ 44.484375 40.625 41.703125 44.40625 \nQ 38.921875 48.1875 33.109375 48.1875 \nQ 26.21875 48.1875 22.15625 43.53125 \nQ 18.109375 38.875 18.109375 30.90625 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.1875 \nQ 21.1875 51.21875 25.484375 53.609375 \nQ 29.78125 56 35.6875 56 \nQ 41.65625 56 45.828125 52.96875 \nQ 50 49.953125 52 44.1875 \nz\n\" id=\"DejaVuSans-109\"/>\n      <path d=\"M 30.609375 48.390625 \nQ 23.390625 48.390625 19.1875 42.75 \nQ 14.984375 37.109375 14.984375 27.296875 \nQ 14.984375 17.484375 19.15625 11.84375 \nQ 23.34375 6.203125 30.609375 6.203125 \nQ 37.796875 6.203125 41.984375 11.859375 \nQ 46.1875 17.53125 46.1875 27.296875 \nQ 46.1875 37.015625 41.984375 42.703125 \nQ 37.796875 48.390625 30.609375 48.390625 \nz\nM 30.609375 56 \nQ 42.328125 56 49.015625 48.375 \nQ 55.71875 40.765625 55.71875 27.296875 \nQ 55.71875 13.875 49.015625 6.21875 \nQ 42.328125 -1.421875 30.609375 -1.421875 \nQ 18.84375 -1.421875 12.171875 6.21875 \nQ 5.515625 13.875 5.515625 27.296875 \nQ 5.515625 40.765625 12.171875 48.375 \nQ 18.84375 56 30.609375 56 \nz\n\" id=\"DejaVuSans-111\"/>\n      <path d=\"M 48.6875 27.296875 \nQ 48.6875 37.203125 44.609375 42.84375 \nQ 40.53125 48.484375 33.40625 48.484375 \nQ 26.265625 48.484375 22.1875 42.84375 \nQ 18.109375 37.203125 18.109375 27.296875 \nQ 18.109375 17.390625 22.1875 11.75 \nQ 26.265625 6.109375 33.40625 6.109375 \nQ 40.53125 6.109375 44.609375 11.75 \nQ 48.6875 17.390625 48.6875 27.296875 \nz\nM 18.109375 46.390625 \nQ 20.953125 51.265625 25.265625 53.625 \nQ 29.59375 56 35.59375 56 \nQ 45.5625 56 51.78125 48.09375 \nQ 58.015625 40.1875 58.015625 27.296875 \nQ 58.015625 14.40625 51.78125 6.484375 \nQ 45.5625 -1.421875 35.59375 -1.421875 \nQ 29.59375 -1.421875 25.265625 0.953125 \nQ 20.953125 3.328125 18.109375 8.203125 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 75.984375 \nL 18.109375 75.984375 \nz\n\" id=\"DejaVuSans-98\"/>\n      <path d=\"M 9.421875 75.984375 \nL 18.40625 75.984375 \nL 18.40625 0 \nL 9.421875 0 \nz\n\" id=\"DejaVuSans-108\"/>\n     </defs>\n     <g transform=\"translate(319.498437 23.798437)scale(0.1 -0.1)\">\n      <use xlink:href=\"#DejaVuSans-105\"/>\n      <use x=\"27.783203\" xlink:href=\"#DejaVuSans-115\"/>\n      <use x=\"79.882812\" xlink:href=\"#DejaVuSans-95\"/>\n      <use x=\"129.882812\" xlink:href=\"#DejaVuSans-109\"/>\n      <use x=\"227.294922\" xlink:href=\"#DejaVuSans-111\"/>\n      <use x=\"288.476562\" xlink:href=\"#DejaVuSans-98\"/>\n      <use x=\"351.953125\" xlink:href=\"#DejaVuSans-105\"/>\n      <use x=\"379.736328\" xlink:href=\"#DejaVuSans-108\"/>\n      <use x=\"407.519531\" xlink:href=\"#DejaVuSans-101\"/>\n     </g>\n    </g>\n    <g id=\"line2d_15\">\n     <path d=\"M 325.769531 35.254687 \nL 345.769531 35.254687 \n\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n    </g>\n    <g id=\"line2d_16\"/>\n    <g id=\"text_15\">\n     <!-- 0 -->\n     <g transform=\"translate(353.769531 38.754687)scale(0.1 -0.1)\">\n      <use xlink:href=\"#DejaVuSans-48\"/>\n     </g>\n    </g>\n    <g id=\"line2d_17\">\n     <path d=\"M 325.769531 49.932812 \nL 345.769531 49.932812 \n\" style=\"fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;\"/>\n    </g>\n    <g id=\"line2d_18\"/>\n    <g id=\"text_16\">\n     <!-- 1 -->\n     <g transform=\"translate(353.769531 53.432812)scale(0.1 -0.1)\">\n      <use xlink:href=\"#DejaVuSans-49\"/>\n     </g>\n    </g>\n   </g>\n  </g>\n </g>\n <defs>\n  <clipPath id=\"p41975ba7e5\">\n   <rect height=\"217.44\" width=\"334.8\" x=\"40.603125\" y=\"7.2\"/>\n  </clipPath>\n </defs>\n</svg>\n",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAD4CAYAAADrRI2NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3dd3hc5ZX48e8ZaaRR75aN5YobLmBANhDAoRtIKAmEACExPQGSTVsSSLLZkOz+QpLfhk0hhOLQQotNME4WDIbFgAPBBYxxwQVX2ZYtq3eNRu/+ce/IwsjSSJo7d+7M+TyPnpm5uuXoenzmnXPf+75ijEEppVTy8LkdgFJKqdjSxK+UUklGE79SSiUZTfxKKZVkNPErpVSSSXU7gEgUFxebsWPHuh2GUkp5yurVqw8aY0oOX+6JxD927FhWrVrldhhKKeUpIrKzt+Va6lFKqSSjiV8ppZKMJn6llEoynqjxK6VUNASDQSoqKmhra3M7lKgKBAKUlZXh9/sjWl8Tv1IqaVRUVJCTk8PYsWMREbfDiQpjDNXV1VRUVDBu3LiIttFSj1IqabS1tVFUVJQwSR9ARCgqKhrQtxhN/EqppJJIST9soH+TJv4EUtfSwRPv7KSupcPtUJRScUwTfwL5yeL1/PC5dfz0bxvcDkUpFcc08SeItmCIJesrAXhxXSUdnV0uR6SUN3zqU5+K6fEeeeQRvv71r/cZy44dO5g+fbpjMWjiTxDv7qylLdjFF8tH0RoM8X5FndshKeUJb731ltshdItVLJr4E8S6vfUA3DTH6s61tqLezXCU8ozs7GwA9u3bx5w5c5g5cybTp0/nzTff7HOb22+/nWnTpnHOOeewYsUKzjjjDMaPH8/ixYsBqwfRddddx4wZMzj++ON57bXXurffvXs3Z5xxBhMnTuSuu+76RCw9hUIhbr/9dmbNmsWxxx7L/fffP+S/WRN/gviwspHS3HQmDMuhKCuNzZWNboeklKc8+eSTzJ07lzVr1vD+++8zc+bMI67b3NzMWWedxfr168nJyeFHP/oRS5cu5bnnnuPHP/4xAPfeey8iwgcffMBTTz3FvHnzurtcrlixgmeffZa1a9eyYMGCPgehnD9/Pnl5eaxcuZKVK1fy4IMPsn379iH9rXoDV4LYVNnI5OG5AEwqzWHTfk38Sg3ErFmzuP766wkGg1x66aV9Jv60tDTOP/98AGbMmEF6ejp+v58ZM2awY8cOAJYvX843vvENAKZMmcKYMWPYvHkzAOeeey5FRUUAfP7zn2f58uWUl5f3eqyXX36ZtWvXsnDhQgDq6+vZsmVLxDdr9UZb/AmgM9TFlgNNTBmeA8Ck0my27G/EGONyZEp5x5w5c3jjjTcYOXIk1157LY899tgR1/X7/d19530+H+np6d3POzs7+z3W4f3u++qHb4zhd7/7HWvWrGHNmjVs376d8847L5I/6Yg08SeAHdUtdHR2MbnUSvxjirJo7ghR06z9+ZWK1M6dOyktLeWmm27ixhtv5N133x3S/k4//XSeeOIJADZv3syuXbuYPHkyAEuXLqWmpobW1lYWLVrEqaeeesT9zJ07l/vuu49gMNi9r+bm5iHFpqWeBLDJrudPtlv8owszAdhV00JRdrprcSnlJcuWLeNXv/oVfr+f7OzsPlv8kbj11lu55ZZbmDFjBqmpqTzyyCPd3wxmz57NZZddRkVFBddcc80RyzwAN954Izt27OCEE07AGENJSQmLFi0aUmzihXJAeXm50Rm4juzXL2/i969tZcNPzyfgT2Hz/kbOu+cNfnPlTC6ZOdLt8JSKGxs3buSYY45xOwxH9Pa3ichqY8wnPlW01JMANlY2Mr4km4A/BYCyggwAKmpb3QxLKRWntNSTAD6sbOC4svzu15lpqRRnp7OrusXFqJTyvpNOOon29vaPLXv88ceZMWOGSxFFhyZ+j2tsC7K7ppUrZ43+2PJRhRnsqtHEr9RQvPPOO26H4AhHSz0iki8iC0XkQxHZKCKniEihiCwVkS32Y4GTMSS6zXZ//XBXzrDRhZma+JVSvXK6xv8bYIkxZgpwHLARuAN41RgzEXjVfq0GKTw0w9Sjcj+2fGR+Bvsb2gh1xf/Fe6VUbDmW+EUkD5gDzAcwxnQYY+qAS4BH7dUeBS51KoZksGJ7DWUFGYzIy/jY8hF5ATq7DAeb2o+wpVIqWTnZ4h8HVAEPi8h7IvKQiGQBpcaYffY6lUBpbxuLyM0iskpEVlVVVTkYpnd1hrp4Z3sNs8cWfuJ34Q+CffWJNam0UolsyZIlTJ48mQkTJnD33Xc7dhwnE38qcAJwnzHmeKCZw8o6xrqJoNdahDHmAWNMuTGmvKSkxMEwveu1TVXUNHcwd/rwT/xueF4AgMp67dKplBeEQiFuu+02XnzxRTZs2MBTTz3Fhg3OTKrkZOKvACqMMeHL4guxPgj2i8gIAPvxgIMxJLSnV+yiJCeds6YM+8TvRtiJX1v8SnnDihUrmDBhAuPHjyctLY0rr7yS559/3pFjOdad0xhTKSK7RWSyMWYTcDawwf6ZB9xtPzrzlyW4yvo2Xtt0gK99+mj8KZ/8/C7MSiMt1UelJn6lBuSuv61nw96GqO5z6lG5/PtF0/pcZ8+ePYwaNar7dVlZmWPdSZ3ux/8N4AkRSQO2Addhfcv4i4jcAOwErnA4hoS0aM0eugx8cdaoXn8vIozIC7BXE79S6jCOJn5jzBqgt9GHznbyuMlgybpKZozMY0xR1hHXGZ4b0Bq/UgPUX8vcKSNHjmT37t3drysqKhg50pmxtnSsHg9qaAuyZncdZx/zydp+TyPyAlrjV8ojZs2axZYtW9i+fTsdHR08/fTTXHzxxY4cS4ds8KB1e6ybtmaOyu9zvRH5Gez/YB9dXQaf78gTPSil3Jeamsrvf/975s6dSygU4vrrr2faNGe+fWji96D1e6wLTzNG5vW53oi8AMGQ4WBzO8NyArEITSk1BBdeeCEXXnih48fRUo8HhSdW72+SlWE51u+rGvXuXaXUIZr4PWh3TUufF3XDiu0PhoNNOgWjUuoQTfwetKumhVEFmf2uF0782uJXSvWkid9j2jtD7G9sY1RhRr/rFueEW/ya+JVSh2ji95g9ta0YQ0Qt/qy0FDL8KRzUFr9SqgdN/B5T2WD1yx+R338vHRGhOCdNW/xKqY/RxO8x4Xp9uMdOf4qz06nSxK9U3Lv++usZNmwY06dPd/xYmvg9JtxDpyQ7sn75xdnpHGzUXj1Kxbtrr72WJUuWxORYmvg9pqqxnbQUH7kZkd17V5KTrqUepTxgzpw5FBZ+clIlJ+idux5T1dhOcXYaIpENwVCcnU5NSwedoS5Sexm+WSl1mBfvgMoPorvP4TPgAudm1BoozQQec7CpvbubZiRKstMwBmqatdyjlLJoi99jqhrbu2fXikT3TVxN7QzL1fF6lOpXHLXMnaItfo852NTencwjUZCVBkBtc9CpkJRSHqOJ30OMMdS2dHQn80gUZNqJv0VLPUrFs6uuuopTTjmFTZs2UVZWxvz58x07lpZ6PKQ1GCIYMuRn+iPepsBet04Tv1Jx7amnnorZsbTF7yF1LVa5Ji8j8sSfb7f4w9sqpZQmfg+pb7WSd/4AEn9aqo+stBRqNfErpWya+D2ku8U/gFIPWK1+LfUoZTHGuB1C1A30b3I08YvIDhH5QETWiMgqe1mhiCwVkS32Y4GTMSSS+lYreQ+k1ANQkOXXi7tKAYFAgOrq6oRK/sYYqqurCQQi764di4u7ZxpjDvZ4fQfwqjHmbhG5w379/RjE4XndpZ7MyHv1gNWzR0s9SkFZWRkVFRVUVVW5HUpUBQIBysrKIl7fjV49lwBn2M8fBZahiT8ig7m4C9YHxe6aFidCUspT/H4/48aNczsM1zld4zfAyyKyWkRutpeVGmP22c8rgdLeNhSRm0VklYisSrRP58Gqbw2S6hOy0lIGtF1Bpl9b/Eqpbk63+E8zxuwRkWHAUhH5sOcvjTFGRHotthljHgAeACgvL0+cgtwQ1LUGyc/0RzxAW1h+ZhoNbUFCXYYU38C2VUolHkdb/MaYPfbjAeA5YDawX0RGANiPB5yMIZHUtwbJHWCZB6wWvzGHrhEopZKbY4lfRLJEJCf8HDgPWAcsBubZq80DnncqhkRT3xIcUB/+MB22QSnVk5OlnlLgObsskQo8aYxZIiIrgb+IyA3ATuAKB2NIKHWtHZQMYIC2sHwdtkEp1YNjid8Ysw04rpfl1cDZTh03kdW3Bpk4LGfA2xXosA1KqR70zl0PqWsJDrgrJ9B9XaChTRO/UkoTv2eEugyNbZ2DS/wB64tdQ2tntMNSSnmQJn6PaOi+a3cILX7t1aOUQhO/Z9S1Du6uXQB/io/MtBQt9SilAE38nlE/hBY/QG7Ar6UepRSgid8zwl0xB9PiB8jNSNUbuJRSgCZ+z6gfQqkH7Ba/lnqUUmji94xDiX9gQzKH5WZo4ldKWTTxe0T9IIdkDssNpGqNXykFaOL3jIa2IBn+FNJSB/dPpi1+pVSYJn6PqG8d3F27YXkZfhpagwk15ZxSanA08XvEUBN/bsBPl4HmjlAUo1JKeZEmfo8YcuLPSO3ej1IquWni94j61s7u5D0YuQEdtkEpZdHE7xENg5x9K0zH61FKhWni94ho1PgBGtq0S6dSyU4Tvwd0hrpoah/ckMxh4TKRtviVUpr4PSDcSh9qd05rX5r4lUp2mvg9YKjj9ABkp+tkLEopiyZ+D4hG4k9N8ZGdnqotfqWUJn4viEbiB2u8Hu3Hr5RyPPGLSIqIvCcif7dfjxORd0Rkq4g8IyKDG24yiTREK/HbwzYopZJbLFr83wQ29nj9C+AeY8wEoBa4IQYxeFr0Wvx+bfErpZxN/CJSBnwGeMh+LcBZwEJ7lUeBS52MIRGEk/VQbuCytk+lUfvxK5X0nG7x/zfwPaDLfl0E1BljwtmnAhjpcAye19AaJD3VR8CfMqT96CxcSilwMPGLyGeBA8aY1YPc/mYRWSUiq6qqqqIcnbfUD3G4hjCt8SulwNkW/6nAxSKyA3gaq8TzGyBfRMKjjZUBe3rb2BjzgDGm3BhTXlJS4mCY8W+owzWE5QZSaWzvpKtLx+RXKpk5lviNMXcaY8qMMWOBK4H/NcZ8CXgNuNxebR7wvFMxJIqoJf4MP8ZAU4fW+ZVKZm704/8+8B0R2YpV85/vQgyeEr0Wv47QqZSCwQ/wPgDGmGXAMvv5NmB2LI6bKOpbg0wqzRnyfg4NzdwJBUPenVLKo/TOXQ+IXqnHHq9He/YoldQiSvwi8lcR+YyI6AdFjIW6DI1tndHp1aOlHqUUkbf4/wBcDWwRkbtFZLKDMakeGtuic9duz33oZCxKJbeIEr8x5hW7R84JwA7gFRF5S0SuE5GhZyR1RLUtVuIvzNIWv1IqOiIu3YhIEXAtcCPwHlaf/BOApY5EpgCoae4AID9z6GPZZQe0xq+UirBXj4g8B0wGHgcuMsbss3/1jIiscio4BXUtVuIviELiT/EJOempOhmLUkku0u6cDxpjXui5QETSjTHtxphyB+JStnCppyAzOhW13Awdr0epZBdpqec/eln2djQDUb3rbvFnRWfagpxAqtb4lUpyfbb4RWQ41uiZGSJyPCD2r3KBTIdjU1g1/lS7RBMNuRk6Jr9Sya6/bDIX64JuGfDrHssbgR84FJPqobYlSH6mH2sqg6HLDfjZU9calX0ppbypz8RvjHkUeFRELjPGPBujmFQPdS0dUenRE5abkcrGfdriVyqZ9VfqucYY82dgrIh85/DfG2N+3ctmKopqWzoojGbi18lYlEp6/ZV6suzHbKcDUb2rawkyujB6l1NyM/w02WPy+3zRKR8ppbylv1LP/fbjXbEJRx2uprmD48ryo7a/3EAqxkBje2dUhoFQSnlPpIO0/VJEckXELyKvikiViFzjdHDJzhhDXUuQ/CgM1xB2aGhmLfcolawi7cd/njGmAfgs1lg9E4DbnQpKWVo6QnSEuqJe4wcdtkGpZBZp4g+XhD4DLDDG1DsUj+qhNorDNYR1j8mvwzYolbQivSvo7yLyIdAK3CIiJUCbc2EpgNpmq1WeH6XhGkBb/EqpyIdlvgP4FFBujAkCzcAlTgamerT4ozRcA/QYk19r/EolrYGMAzAFqz9/z20ei3I8qgdHSj0BnYxFqWQX6bDMjwNHA2uAkL3YoInfUXVRHpkTeozJry1+pZJWpC3+cmCqMcY4GYz6uPAkLNHsb989Jr/W+JVKWpH26lkHDB/IjkUkICIrROR9EVkvInfZy8eJyDsislVEnhGR6NUxEkxdSwe5gVRSU6I7x31uhl979SiVxCLNKMXABhF5SUQWh3/62aYdOMsYcxwwEzhfRE4GfgHcY4yZANQCNww2+ERX2xKkMIoXdsN0MhalklukpZ6fDHTHdlmoyX7pt38McBZwtb38UXvf9w10/8mgNsojc4bl6mQsSiW1SLtzvo51x67ffr4SeLe/7UQkRUTWAAewJmX/CKgzxoTrDBVYE730tu3NIrJKRFZVVVVFEmbCqWsJRvXCbpjV4tdSj1LJKtKxem4CFgL324tGAov6284YEzLGzMSayGU2VpfQiBhjHjDGlBtjyktKSiLdLKHUNHdEtStnWG7Ary1+pZJYpDX+24BTgQYAY8wWYFikBzHG1AGvAacA+T3uBSgD9kQcbZKpa+mI6s1bYbkZ2qtHqWQWaeJvN8Z0hF/YibvPrp0iUiIi+fbzDOBcYCPWB8Dl9mrzgOcHGnQy6Ojsorkj5EypJ3BoTH6lVPKJNPG/LiI/wJp0/VxgAfC3frYZAbwmImuxrgksNcb8Hfg+8B0R2QoUAfMHF3piq7Pv2nXk4m6Gv3tMfqVU8om0V88dWN0uPwC+CrwAPNTXBsaYtcDxvSzfhlXvV32ocWC4hrDcHnfv6mQsSiWfiBK/MaZLRBYBi4wxydnFJsbCI3MWRHESlrDwt4jalg5GRXFaR6WUN/RZ6hHLT0TkILAJ2GTPvvXj2ISXvOocbPEX2h8mtS16gVepZNRfjf/bWL15ZhljCo0xhcBJwKki8m3Ho0titd0DtEU/8Xe3+Js7+llTKZWI+kv8XwauMsZsDy+wa/TXAF9xMrBkV9t9cTf6pZ6CHqUepVTy6S/x+40xBw9faNf59aqgg2qbO8hMSyHgT4n6vvMy/IhoqUepZNVf4u+rSajNRQfVtgQdKfOANTRzXoZfSz1KJan+evUcJyINvSwXIOBAPMpW19LhSJknrCAzTUs9SiWpPhO/MSb6dQYVkdoWZ8bpCSvI9HfP8KWUSi7RneFDRU1tS9CRcXrCCjLTumf4UkolF038ccpq8TtX6snPTOu+V0AplVw08cehUJehvjXoyDg9YQWZfu3Vo1SS0sQfh+pbgxgDhU5e3M1KozUYoi0YcuwYCamjGdoaoEvPm/KuSAdpUzFU09wOQGF2umPH6HkT14i8DMeO43nGwNZXYO0zsGM5NO6zlqekw4hjYdrnYObVkFHgbpxKDYAm/jhU3WTV3oscvbhrj9fTHNTEfyR73oUX/hX2rLYS+4RzYdgUK+k3VcL2N+ClH8Drv4Qz7oDZXwWffolW8U8TfxwK97YpdDLxZ+mwDX1a8SAsuROyiuHi38NxV0JKL6W3fWvhlZ/Akjtg80tw2UPWNkrFMW2exKGDzbFo8WviP6LXf2W19I8+C255C074cu9JH6xyzzXPwkW/gV1vw5/mQt2u2Mar1ABp4o9DNXapx9l+/Do0c69WPwqv/QcceyVc9RRkFva/jQiceC185XloroL550H1R46HqtRgaeKPQzXN7eQGUvGnOPfPE/5QqW5qd+wYnrNnNfzPd62W/qV/AN8Ab1wffTJc9yJ0tsOfPw+Nlc7EqdQQaeKPQ9XNHRQ52KMHwJ/iIz/Tz0FN/JbOdlh0K2QPg8vmDzzph5VOgy8thKYq+PNl0FYf3TiVigJN/HGoprnD0Qu7YcXZ6Rxs1Bo/AG/+Gqo+hM/eE1l5py9lJ8IXH7f29+yN2udfxR1N/HEodok/TVv8APV7YPk9MP0ymDQ3OvuccDZc8AvY8rLV60epOOJY4heRUSLymohsEJH1IvJNe3mhiCwVkS32o975cpjq5g5He/SEleQENPEDvH43YODsf4/ufmfdCOU3wFu/hfefju6+lRoCJ1v8ncB3jTFTgZOB20RkKnAH8KoxZiLwqv1a2bq6TIxb/Ele6jm4Fd77M5RfDwVjor//C34BY0+Hxf8CFauiv3+lBsGxxG+M2WeMedd+3ghsBEYClwCP2qs9ClzqVAxe1NAWJNRlYlbjb2rvpLUjiWvQb/0GUtLg9O86s/8UP3zhUcgZDk9fDfUVzhxHqQGISY1fRMYCxwPvAKXGGHvAEyqB0iNsc7OIrBKRVVVVVbEIMy5Uh2/eyo5BqcfuOZS05Z6mKnj/Geuu3Oxhzh0nqwiueho6WuDJL0J7o3PHUioCjid+EckGngW+ZYz52DSOxhgDmN62M8Y8YIwpN8aUl5SUOB1m3Dg0XIOz3TkBinOsD5eqZE38Kx+CUDucfJvzxyqdClc8Agc2woLrINTp/DGVOgJHE7+I+LGS/hPGmL/ai/eLyAj79yOAA07G4DWxGKAtrCTbmjb5YGMSJv5gG6x8ECadDyWTYnPMCefAZ/4/bF1qje1jem3zKOU4J3v1CDAf2GiM+XWPXy0G5tnP5wHPOxWDF1XbQzLHotQTbvEn5QXeD/8OLdVw0ldje9zy6+GUr1sfOsvvie2xlbI5OTrnqcCXgQ9EZI297AfA3cBfROQGYCdwhYMxeM6BhnZErAuvTivKSuIa/3uPQ95oGHdG7I997s+s4RxevQvSc2D2TbGPQSU1xxK/MWY5IEf49dlOHdfrDjS2U5iZ5ug4PWFpqT7yMvxUJVupp3YnbHvdGkPfjfHzfT743B+t2bxe+FdIy4aZV8U+DpW09M7dOFPV2EZJjvOt/bCSnHQONLbF7HhxYc2T1uPMq92LIcUPX3gExn0anr8VNix2LxaVdDTxx5kDje0Myw3E7Hgj8gJUNiRRi7+rC9Y8AePPgPzR7sbiD8CVT8LIclh4PWx5xd14VNLQxB9nDjS0MyyGLf4ReQEq61tjdjzXbV8G9butyVXiQXo2fGkBDDsGnvmSNa+vUg7TxB9HQl2GqqbYJv7heRkcaGwnGOqK2TFd9d6fIZAPkz/jdiSHZOTDl5+D/DHWDV4Vq92OSCU4TfxxpKa5g1CXiXmL3xirxJTwWmpg49/h2C9aZZZ4klVszeCVVWxN4lK5zu2IVALTxB9HwhdZY13jB9hXlwTlng8WWnfqHn+N25H0LncEfGUxpGXB45fCwS1uR6QSlCb+OBJudce2xZ8BwL76JOjZ897jMPxYa4L0eFUwxmr5AzxxOTRXuxuPSkia+ONIld27pjSGLf7hdou/MtET/773oXItnPAVtyPpX/FEa1C3hn3wzDXWtJBKRZEm/jiyv8FKvrHsx58bSCUzLYW9id6z593HISUdZlzudiSRKSu3Jnzf9Rb87Vs6ro+KKieHbFADtLe+laKsNAL+QU70PQgiYnfpTOAWf7AVPvgLTL0YMjw04duMy6F6Kyz7OYw4Dk7+mtsRqQShLf44sqeujZEFGTE/7oi8DPYmcuLf+Ddoq/dGmedwc74Hky6Al3+k3TxV1GjijyN7als4Ki/2if+o/AB7ahO41PPuY1AwFsac5nYkA+fzWSWfnBGw4FqrS6pSQ6SJP04YY9jrUot/dGEmB5vaaW5PwMlBqj+CHW/C8V92Z0C2aMgstMb1adwHi27Ver8aMo/+T0g8tS1BWoMhjsp3IfEXZQGwq6Yl5sd23Ht/BvHBzC+5HcnQlJ0I5/0MNr8Iqx92OxrlcZr448Re+waqkS4k/jGFmQDsrE6wxB/qtEbinHiedXOU183+Kow/E176ofVNRqlB0sQfJypqXUz8RVbi31XTHPNjO2rTC9BU6c2Lur0J1/tT0uCvN+u8vWrQNPHHie4Wvws1/vzMNHIDqYlX6lnxgDXL1qTz3Y4kenKPgs/eA3tWwZv/5XY0yqM08ceJitpWMvwpFGT6XTn+mKKsxCr1VK6zLurOvhF8sbsvIiamfx5mXAGv/0K7eKpB0cQfJ3ZUNzOmKBNrjvrYG12UmVgt/hX3Q2qG1ZsnEV34K6uL519vsqZwVGoANPHHiR3VzYy1e9e4YUxhJntqWxNjXP6WGli7AI69wuoKmYgy8uFz90HNNnj539yORnmMJv440BnqYndNC2OL3Uv844qz6OwyidHqX/EgdLbCSQk+xMG4OXDKbbBqPmx+2e1olIc4lvhF5E8ickBE1vVYVigiS0Vki/3ooYFTnLO3ro1gyDCuONO1GCaV5gCwZX+jazFERXsTvHMfTL4QSqe6HY3zzv4xDJsGz98GzQfdjkZ5hJMt/keAw7tT3AG8aoyZCLxqv05626utGq2bpZ4Jw7IB2Ly/ybUYomL1I9BaC6d9x+1IYiM1HS57ENrq4G/f1Lt6VUQcS/zGmDeAwwcWuQR41H7+KHCpU8f3kh0HrcQ/zsVST1Z6KmUFGWz2cou/sx3e+p1VAhk1y+1oYqd0mtXy//Dv1p3KSvUj1jX+UmPMPvt5JVAa4+PHpe0Hm8lKS4npOPy9mVSawxYvt/hXP2rdsJUsrf2eTr4Nxp4OS+6wLvgq1QfXLu4aYwxwxO+lInKziKwSkVVVVVUxjCz2rK6cWa515QybVJrDtoNNdHqxZ097E7zxK2sEzvFnuB1N7Pl8cOl9ICmw8Abo7HA7IhXHYp3494vICAD78cCRVjTGPGCMKTfGlJeUlMQsQDfsONjsapknbFJpNsGQYYcXb+R65z5oPgDn/Du4/AHqmvxRcMnvYO+78Opdbkej4lisE/9iYJ79fB7wfIyPH3fagiF21bR0X1x10+ThVs+eDfsaXI5kgFpq4B+/tXryjJrtdjTumnoJlN8Ab/8eNr/kdjQqTjnZnfMp4G1gsohUiMgNwN3AuSKyBTjHfp3UPqpqosvAxFL3E/+k0hzSU32s3V3ndigDs+xu6GiCs+/zXN8AAA2ySURBVH7kdiTxYe7/g9Lp8NzXoGGv29GoOORkr56rjDEjjDF+Y0yZMWa+MabaGHO2MWaiMeYcY0zSTycUvpga7kfvJn+Kj6lH5bJ2T73boURu/3pY+RCceJ3Vu0WBPwCXPwydbfDsTdAVcjsiFWf0zl2Xbd7fSKpPXO3D39OxI/NYt6eeUJcH+oMbAy9+HwK52to/XMkk+Mx/wc7l1kVvpXrQxO+yzfubGFecRVpqfPxTHFuWT0tHiI+qPNCtc92z1gicZ/1b4o7JMxQzr4Zjr7RG8dyx3O1oVByJj2yTxLYcaIyLMk/YcaPyAHg/3uv8TQfghdth5Ilw4rVuRxO/PvNfUDgenr1Rh3RQ3TTxu6i1w+rREw8XdsPGF2eTG0hl1Y5at0M5MmPgf75jDUd86X2JN95+NKVnW/X+lhpYdAt0efAeDRV1mvhd9FFVE8bEx4XdMJ9POGl8EW9vq3Y7lCP7YCFs/BuceSeUTHY7mvg34liY+5+w5WX4571uR6PigCZ+F4XHxZkURy1+gFPGF7GrpoU99nSQcaVqkzUY2aiT4JRvuB2Nd8y6EaZ8Fl75ic7apTTxu2njvgbSUn2MiZMePWEnjy8C4O2P4qzV394Iz3wZ/BnwhUcgJdXtiLxDBC75vTVr18LroM1DXXZV1Gnid9G6PQ0cMzwHf0p8/TNMGZ5DQaaftz6Ko4uBne3w9Jegeitc/idr0nE1MBkFcNl8qK+Axf+iQzgnsfjKOEnEGMP6vfVMG5nndiif4PMJcyaVsGxTVXz05+9sh4XXw/bX4ZJ7Yfyn3Y7Iu0afZN3zsGERrH7Y7WiUSzTxu6SitpWGtk6mHxV/iR/g3Kml1DR3sHqny717WmrgicutseYv+CXMvMrdeBLBqd+Co8+CJXdadz6rpKOJ3yXr7GERph2V63Ikvfv0pBL8KcLL6yvdC2LnW/DH02Dn2/C5++Gkr7oXSyLx+azzGciDv8zTen8S0sTvknV760nxSfeImPEmJ+DnU0cXs2R9JV2xLvfsX2/V8x++AFLS4MalcNyVsY0h0WUPs66V1G6HBddBqNPtiFQMaeJ3yZrddUwuzSHgj9+bjy6ZeRQVta2s2BGjsfSqNltJ6L5TYfsbcOYP4WtvwlHHx+b4yWbsadadvR+9Ci/9QC/2JhFN/C7oDHXx3q46yscWuB1Kny6YPoLs9FQWrq5w9kA126whhP9wkjWG/OnfhW+thU9/D9Lj8xtRwjjxWmvaxhX3w2v/qck/SWhHaBd8WNlIS0eI8rHxPbBYRloKFx03gkXv7eXOC6ZQlB3lOYGbDsDrv7R6l/hS4eRb4bRvQ1ZxdI+j+nbef0B7gzWKZ1cnnPVj6zqASlia+F2w0i6dlI+J7xY/wA2njefplbt58M3t3HHBlOjstL0R3r4X3vodBFvhxHkw53uQOyI6+1cD4/PBRb8F8cHye+DgFvjcH/XbVgLTj3UXvP1RNSPzMzgqP8PtUPo1YVg2Fx93FA//YztbDwxxqOZQEFY8CL89Hpb93OpSeNsK+Ow9mvTd5vPBRb+B8++GTS/CvSfr1I0JTBN/jLV3hli+9SBnTvHOBPI/vPAYMtNSuPWJ1dQ0dwx8B8bA+ufg3tnwwr9C0US44RX44uNQPCH6AavBEYGTb4Hrl1ijej55BTzyWdj2utb+E4wm/hh7Z1sNLR0hzpoyzO1QIjYsN8C9XzqBndUtXPXAP9kb6eBtxsDml+Ghs2HBtZCSDlc9A9e9AKNmORqzGoJRs+Grb1qt/4Nb4LGL4Q+nwNt/gOY4G79JDYom/hhbtGYP2empnDLeWxcwP3V0MQ9fO4u9da187g//YP3ePm766eyAtX+xumU++QVo3G8NtXDLP2Dy+VbLUsW31DSr9f/N9636f1oWvHQn/HoKPHMNbFhsDaWhPEmMB77ClZeXm1WrVrkdxpDVNHdwys9f5fITy/jPz81wO5xB+bCygeseXklDa5A/XHMin57Uo2RVtQnefQzefxpaDkLxZDjtWzD9ciuRKG/bvx7efRzWLYTmKkjPg6kXw7FXwJjTtCdQHBKR1caY8k8s18QfO3f+dS3PrNzNS9+aw8Q4mnxloCrr27jukZVs3t/AfWelcJ5vtTWWzoENVrfMyRfACfPg6LM1GSSiUCdsXwZrF1j/7h1NkHMUzLgMplwEI0+AFL/bUSriLPGLyPnAb4AU4CFjzN19re+lxN/eGeKl9ft5fVMVjW1B8jP9FGSmsbO6hSXrK/nqnPHceeExboc5OB3NcOBDqFhJcNubtG5dTm5XHV34aC6dRfbMS5AZX7CGA1DJoaMFNr0AHyyAra9Y9wGk5cCYU2DETCidCiVTIHckBOJzXKpEdqTEH/N+/CKSAtwLnAtUACtFZLExZkOsY4mWzlAXm/Y38vyavTy7uoLq5g6KstIozk7n/YoOapuDZKan8PUzJ/Dtcye5HW7vOjusm3ja6qGtDhr2WeO21++Gup2wf4N1hy1WQ8GfP5qU6efzevAY7vpwJNt2ZnJMRy5f7GpmzqQmxhZl4fNpLT/hpWXCjMutn5Yaa+js7W/Ajn9YHwSmxxy/aTmQNxKySyGz6LCfwo+/Ts+xJtzRbw6OiHmLX0ROAX5ijJlrv74TwBjz8yNtM9gW/w+e+4B3tlVbqcpYKavLGIwBg/1o4OrO57gw9L+IvZIB6zkgHP7aED5j4fWx9yUCGf4UstNTCPh9SPdxDWAQ5LBucfbz7mWHvx7iOr1uxyfXCXVAZxu9Sg1A3igYNgVKp0PpNKsllz+qe5WWjk6eX7OXx97eycZ9DQCkpfgoyk4jNUVI9fnwCYgDF3ULMv0s+Nqnor5fFQXBVuu6T/VWaNgLDXusxkRzFbRUWz+t/Qz7LSngzwR/wOoVJgKI9fix575Dz0mwBsfVz0DhuEFtGjctfmAksLvH6wrgpMNXEpGbgZsBRo8ePbgD5WcwZXiu9X4AfCLWe8Tav/X2ECioK6OhaWLPo/d470iPl76PL7cffCLkZqQxLDedQGpq+A/osTc5bFmPN+Yn9tfbOnKEdfrYbiDr+FKsIXrT86zHQK41RV/eKKsl1k/CzkxL5arZo7ly1ih2Vrfw9rZqdla3UN3UTqjL0NllHJvQJTtdbz6PW/4MOGqm9XMkoU4r+Yc/CFqqrY4BHc0QbINgi9UoCbZaDRRjNaKsVltX788TTWqUh0ohjodsMMY8ADwAVot/MPu47cxIbw7q442pIiYijC3OYmxxfM0hrOJYSipkl1g/Kmbc6HKxBxjV43WZvUwppVQMuJH4VwITRWSciKQBVwKLXYhDKaWSUsxLPcaYThH5OvASVnfOPxljdOJPpZSKEVdq/MaYF4AX3Di2UkolO72tUimlkowmfqWUSjKa+JVSKslo4ldKqSTjidE5RaQK2DmATYqBgw6Fkyj0HPVPz1Hf9Pz0z+1zNMYY84m74zyR+AdKRFb1Nj6FOkTPUf/0HPVNz0//4vUcaalHKaWSjCZ+pZRKMoma+B9wOwAP0HPUPz1HfdPz07+4PEcJWeNXSil1ZIna4ldKKXUEmviVUirJeC7xi8j5IrJJRLaKyB29/P47IrJBRNaKyKsiMqbH7+aJyBb7Z15sI4+NIZ6fkIissX8SdqjsCM7R10TkA/s8LBeRqT1+d6e93SYRmRvbyGNnsOdIRMaKSGuP99EfYx+98/o7Pz3Wu0xEjIiU91jm/nvIGOOZH6xhnD8CxgNpwPvA1MPWORPItJ/fAjxjPy8EttmPBfbzArf/png5P/brJrf/hjg5R7k9nl8MLLGfT7XXTwfG2ftJcftvirNzNBZY5/bf4Pb5sdfLAd4A/gmUx9N7yGst/tnAVmPMNmNMB/A0cEnPFYwxrxljWuyX/8Sa4QtgLrDUGFNjjKkFlgLnxyjuWBnK+UkWkZyjhh4vszg0M/0lwNPGmHZjzHZgq72/RDOUc5QM+j0/tp8BvwDaeiyLi/eQ1xJ/bxO1j+xj/RuAFwe5rRcN5fwABERklYj8U0QudSLAOBDRORKR20TkI+CXwL8MZNsEMJRzBDBORN4TkddF5HRnQ3VFv+dHRE4ARhlj/meg28aC1xJ/xETkGqAc+JXbscSjI5yfMca6vfxq4L9F5GhXgosDxph7jTFHA98HfuR2PPHoCOdoHzDaGHM88B3gSRHJdStGN4iID/g18F23YzkSryX+iCZqF5FzgB8CFxtj2geyrccN5fxgjNljP24DlgHHOxmsSwb6PngaCH/7SYb3EAzhHNkljGr7+WqsGvYkh+J0S3/nJweYDiwTkR3AycBi+wJvfLyH3L5QMsCLKqlYF2XHceiiyrTD1jke68028bDlhcB2rAu7BfbzQrf/pjg6PwVAuv28GNhCLxesvP4T4Tma2OP5RcAq+/k0Pn5hbhuJeXF3KOeoJHxOsC5+7knG/2eHrb+MQxd34+I95Mqcu4NljjBRu4j8FOuNtxirdJENLBARgF3GmIuNMTUi8jNgpb27nxpjalz4MxwzlPMDHAPcLyJdWN8E7zbGbHDlD3FQhOfo6/a3oiBQC8yzt10vIn8BNgCdwG3GmJArf4iDhnKOgDnAT0UkCHQBX0vS/2dH2jYu3kM6ZINSSiUZr9X4lVJKDZEmfqWUSjKa+JVSKslo4ldKqSSjiV8ppZKMJn6llEoymviVUirJ/B+TdhFR3m5cfwAAAABJRU5ErkJggg==\n"
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "source": [
    "## Creating an list with bootstrapped means for each AB-group\n",
    "boot_1d = []\n",
    "for i in range(1000):\n",
    "    boot_mean = meta_data.sample(frac = 1,replace = True).groupby('is_mobile')['is_package'].mean()\n",
    "    boot_1d.append(boot_mean)\n",
    "    \n",
    "# Transforming the list to a DataFrame\n",
    "boot_1d = pd.DataFrame(boot_1d)\n",
    "    \n",
    "# A Kernel Density Estimate plot of the bootstrap distributions\n",
    "boot_1d.plot(kind='density')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "<class 'pandas.core.frame.DataFrame'>\nIndex: 1000 entries, is_package to is_package\nData columns (total 3 columns):\n #   Column  Non-Null Count  Dtype  \n---  ------  --------------  -----  \n 0   0       1000 non-null   float64\n 1   1       1000 non-null   float64\n 2   diff    1000 non-null   float64\ndtypes: float64(3)\nmemory usage: 31.2+ KB\n"
    }
   ],
   "source": [
    "boot_1d.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "Probability that click/booking is worse when use mobile connection: 0.0\n"
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"263.63625pt\" version=\"1.1\" viewBox=\"0 0 392.14375 263.63625\" width=\"392.14375pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <defs>\n  <style type=\"text/css\">\n*{stroke-linecap:butt;stroke-linejoin:round;}\n  </style>\n </defs>\n <g id=\"figure_1\">\n  <g id=\"patch_1\">\n   <path d=\"M 0 263.63625 \nL 392.14375 263.63625 \nL 392.14375 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n  </g>\n  <g id=\"axes_1\">\n   <g id=\"patch_2\">\n    <path d=\"M 50.14375 239.758125 \nL 384.94375 239.758125 \nL 384.94375 22.318125 \nL 50.14375 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n   </g>\n   <g id=\"matplotlib.axis_1\">\n    <g id=\"xtick_1\">\n     <g id=\"line2d_1\">\n      <defs>\n       <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"m0333232e42\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"55.43098\" xlink:href=\"#m0333232e42\" y=\"239.758125\"/>\n      </g>\n     </g>\n     <g id=\"text_1\">\n      <!-- −50 -->\n      <defs>\n       <path d=\"M 10.59375 35.5 \nL 73.1875 35.5 \nL 73.1875 27.203125 \nL 10.59375 27.203125 \nz\n\" id=\"DejaVuSans-8722\"/>\n       <path d=\"M 10.796875 72.90625 \nL 49.515625 72.90625 \nL 49.515625 64.59375 \nL 19.828125 64.59375 \nL 19.828125 46.734375 \nQ 21.96875 47.46875 24.109375 47.828125 \nQ 26.265625 48.1875 28.421875 48.1875 \nQ 40.625 48.1875 47.75 41.5 \nQ 54.890625 34.8125 54.890625 23.390625 \nQ 54.890625 11.625 47.5625 5.09375 \nQ 40.234375 -1.421875 26.90625 -1.421875 \nQ 22.3125 -1.421875 17.546875 -0.640625 \nQ 12.796875 0.140625 7.71875 1.703125 \nL 7.71875 11.625 \nQ 12.109375 9.234375 16.796875 8.0625 \nQ 21.484375 6.890625 26.703125 6.890625 \nQ 35.15625 6.890625 40.078125 11.328125 \nQ 45.015625 15.765625 45.015625 23.390625 \nQ 45.015625 31 40.078125 35.4375 \nQ 35.15625 39.890625 26.703125 39.890625 \nQ 22.75 39.890625 18.8125 39.015625 \nQ 14.890625 38.140625 10.796875 36.28125 \nz\n\" id=\"DejaVuSans-53\"/>\n       <path d=\"M 31.78125 66.40625 \nQ 24.171875 66.40625 20.328125 58.90625 \nQ 16.5 51.421875 16.5 36.375 \nQ 16.5 21.390625 20.328125 13.890625 \nQ 24.171875 6.390625 31.78125 6.390625 \nQ 39.453125 6.390625 43.28125 13.890625 \nQ 47.125 21.390625 47.125 36.375 \nQ 47.125 51.421875 43.28125 58.90625 \nQ 39.453125 66.40625 31.78125 66.40625 \nz\nM 31.78125 74.21875 \nQ 44.046875 74.21875 50.515625 64.515625 \nQ 56.984375 54.828125 56.984375 36.375 \nQ 56.984375 17.96875 50.515625 8.265625 \nQ 44.046875 -1.421875 31.78125 -1.421875 \nQ 19.53125 -1.421875 13.0625 8.265625 \nQ 6.59375 17.96875 6.59375 36.375 \nQ 6.59375 54.828125 13.0625 64.515625 \nQ 19.53125 74.21875 31.78125 74.21875 \nz\n\" id=\"DejaVuSans-48\"/>\n      </defs>\n      <g transform=\"translate(44.878637 254.356563)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-8722\"/>\n       <use x=\"83.789062\" xlink:href=\"#DejaVuSans-53\"/>\n       <use x=\"147.412109\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_2\">\n     <g id=\"line2d_2\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"107.455609\" xlink:href=\"#m0333232e42\" y=\"239.758125\"/>\n      </g>\n     </g>\n     <g id=\"text_2\">\n      <!-- −40 -->\n      <defs>\n       <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n      </defs>\n      <g transform=\"translate(96.903265 254.356563)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-8722\"/>\n       <use x=\"83.789062\" xlink:href=\"#DejaVuSans-52\"/>\n       <use x=\"147.412109\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_3\">\n     <g id=\"line2d_3\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"159.480237\" xlink:href=\"#m0333232e42\" y=\"239.758125\"/>\n      </g>\n     </g>\n     <g id=\"text_3\">\n      <!-- −30 -->\n      <defs>\n       <path d=\"M 40.578125 39.3125 \nQ 47.65625 37.796875 51.625 33 \nQ 55.609375 28.21875 55.609375 21.1875 \nQ 55.609375 10.40625 48.1875 4.484375 \nQ 40.765625 -1.421875 27.09375 -1.421875 \nQ 22.515625 -1.421875 17.65625 -0.515625 \nQ 12.796875 0.390625 7.625 2.203125 \nL 7.625 11.71875 \nQ 11.71875 9.328125 16.59375 8.109375 \nQ 21.484375 6.890625 26.8125 6.890625 \nQ 36.078125 6.890625 40.9375 10.546875 \nQ 45.796875 14.203125 45.796875 21.1875 \nQ 45.796875 27.640625 41.28125 31.265625 \nQ 36.765625 34.90625 28.71875 34.90625 \nL 20.21875 34.90625 \nL 20.21875 43.015625 \nL 29.109375 43.015625 \nQ 36.375 43.015625 40.234375 45.921875 \nQ 44.09375 48.828125 44.09375 54.296875 \nQ 44.09375 59.90625 40.109375 62.90625 \nQ 36.140625 65.921875 28.71875 65.921875 \nQ 24.65625 65.921875 20.015625 65.03125 \nQ 15.375 64.15625 9.8125 62.3125 \nL 9.8125 71.09375 \nQ 15.4375 72.65625 20.34375 73.4375 \nQ 25.25 74.21875 29.59375 74.21875 \nQ 40.828125 74.21875 47.359375 69.109375 \nQ 53.90625 64.015625 53.90625 55.328125 \nQ 53.90625 49.265625 50.4375 45.09375 \nQ 46.96875 40.921875 40.578125 39.3125 \nz\n\" id=\"DejaVuSans-51\"/>\n      </defs>\n      <g transform=\"translate(148.927893 254.356563)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-8722\"/>\n       <use x=\"83.789062\" xlink:href=\"#DejaVuSans-51\"/>\n       <use x=\"147.412109\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_4\">\n     <g id=\"line2d_4\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"211.504866\" xlink:href=\"#m0333232e42\" y=\"239.758125\"/>\n      </g>\n     </g>\n     <g id=\"text_4\">\n      <!-- −20 -->\n      <defs>\n       <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n      </defs>\n      <g transform=\"translate(200.952522 254.356563)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-8722\"/>\n       <use x=\"83.789062\" xlink:href=\"#DejaVuSans-50\"/>\n       <use x=\"147.412109\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_5\">\n     <g id=\"line2d_5\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"263.529494\" xlink:href=\"#m0333232e42\" y=\"239.758125\"/>\n      </g>\n     </g>\n     <g id=\"text_5\">\n      <!-- −10 -->\n      <defs>\n       <path d=\"M 12.40625 8.296875 \nL 28.515625 8.296875 \nL 28.515625 63.921875 \nL 10.984375 60.40625 \nL 10.984375 69.390625 \nL 28.421875 72.90625 \nL 38.28125 72.90625 \nL 38.28125 8.296875 \nL 54.390625 8.296875 \nL 54.390625 0 \nL 12.40625 0 \nz\n\" id=\"DejaVuSans-49\"/>\n      </defs>\n      <g transform=\"translate(252.97715 254.356563)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-8722\"/>\n       <use x=\"83.789062\" xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"147.412109\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_6\">\n     <g id=\"line2d_6\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"315.554122\" xlink:href=\"#m0333232e42\" y=\"239.758125\"/>\n      </g>\n     </g>\n     <g id=\"text_6\">\n      <!-- 0 -->\n      <g transform=\"translate(312.372872 254.356563)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_7\">\n     <g id=\"line2d_7\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"367.578751\" xlink:href=\"#m0333232e42\" y=\"239.758125\"/>\n      </g>\n     </g>\n     <g id=\"text_7\">\n      <!-- 10 -->\n      <g transform=\"translate(361.216251 254.356563)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n   </g>\n   <g id=\"matplotlib.axis_2\">\n    <g id=\"ytick_1\">\n     <g id=\"line2d_8\">\n      <defs>\n       <path d=\"M 0 0 \nL -3.5 0 \n\" id=\"md9b8dc13b3\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"50.14375\" xlink:href=\"#md9b8dc13b3\" y=\"229.874489\"/>\n      </g>\n     </g>\n     <g id=\"text_8\">\n      <!-- 0.00 -->\n      <defs>\n       <path d=\"M 10.6875 12.40625 \nL 21 12.40625 \nL 21 0 \nL 10.6875 0 \nz\n\" id=\"DejaVuSans-46\"/>\n      </defs>\n      <g transform=\"translate(20.878125 233.673707)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_2\">\n     <g id=\"line2d_9\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"50.14375\" xlink:href=\"#md9b8dc13b3\" y=\"184.438544\"/>\n      </g>\n     </g>\n     <g id=\"text_9\">\n      <!-- 0.02 -->\n      <g transform=\"translate(20.878125 188.237763)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-50\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_3\">\n     <g id=\"line2d_10\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"50.14375\" xlink:href=\"#md9b8dc13b3\" y=\"139.0026\"/>\n      </g>\n     </g>\n     <g id=\"text_10\">\n      <!-- 0.04 -->\n      <g transform=\"translate(20.878125 142.801819)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-52\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_4\">\n     <g id=\"line2d_11\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"50.14375\" xlink:href=\"#md9b8dc13b3\" y=\"93.566656\"/>\n      </g>\n     </g>\n     <g id=\"text_11\">\n      <!-- 0.06 -->\n      <defs>\n       <path d=\"M 33.015625 40.375 \nQ 26.375 40.375 22.484375 35.828125 \nQ 18.609375 31.296875 18.609375 23.390625 \nQ 18.609375 15.53125 22.484375 10.953125 \nQ 26.375 6.390625 33.015625 6.390625 \nQ 39.65625 6.390625 43.53125 10.953125 \nQ 47.40625 15.53125 47.40625 23.390625 \nQ 47.40625 31.296875 43.53125 35.828125 \nQ 39.65625 40.375 33.015625 40.375 \nz\nM 52.59375 71.296875 \nL 52.59375 62.3125 \nQ 48.875 64.0625 45.09375 64.984375 \nQ 41.3125 65.921875 37.59375 65.921875 \nQ 27.828125 65.921875 22.671875 59.328125 \nQ 17.53125 52.734375 16.796875 39.40625 \nQ 19.671875 43.65625 24.015625 45.921875 \nQ 28.375 48.1875 33.59375 48.1875 \nQ 44.578125 48.1875 50.953125 41.515625 \nQ 57.328125 34.859375 57.328125 23.390625 \nQ 57.328125 12.15625 50.6875 5.359375 \nQ 44.046875 -1.421875 33.015625 -1.421875 \nQ 20.359375 -1.421875 13.671875 8.265625 \nQ 6.984375 17.96875 6.984375 36.375 \nQ 6.984375 53.65625 15.1875 63.9375 \nQ 23.390625 74.21875 37.203125 74.21875 \nQ 40.921875 74.21875 44.703125 73.484375 \nQ 48.484375 72.75 52.59375 71.296875 \nz\n\" id=\"DejaVuSans-54\"/>\n      </defs>\n      <g transform=\"translate(20.878125 97.365875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-54\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_5\">\n     <g id=\"line2d_12\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"50.14375\" xlink:href=\"#md9b8dc13b3\" y=\"48.130712\"/>\n      </g>\n     </g>\n     <g id=\"text_12\">\n      <!-- 0.08 -->\n      <defs>\n       <path d=\"M 31.78125 34.625 \nQ 24.75 34.625 20.71875 30.859375 \nQ 16.703125 27.09375 16.703125 20.515625 \nQ 16.703125 13.921875 20.71875 10.15625 \nQ 24.75 6.390625 31.78125 6.390625 \nQ 38.8125 6.390625 42.859375 10.171875 \nQ 46.921875 13.96875 46.921875 20.515625 \nQ 46.921875 27.09375 42.890625 30.859375 \nQ 38.875 34.625 31.78125 34.625 \nz\nM 21.921875 38.8125 \nQ 15.578125 40.375 12.03125 44.71875 \nQ 8.5 49.078125 8.5 55.328125 \nQ 8.5 64.0625 14.71875 69.140625 \nQ 20.953125 74.21875 31.78125 74.21875 \nQ 42.671875 74.21875 48.875 69.140625 \nQ 55.078125 64.0625 55.078125 55.328125 \nQ 55.078125 49.078125 51.53125 44.71875 \nQ 48 40.375 41.703125 38.8125 \nQ 48.828125 37.15625 52.796875 32.3125 \nQ 56.78125 27.484375 56.78125 20.515625 \nQ 56.78125 9.90625 50.3125 4.234375 \nQ 43.84375 -1.421875 31.78125 -1.421875 \nQ 19.734375 -1.421875 13.25 4.234375 \nQ 6.78125 9.90625 6.78125 20.515625 \nQ 6.78125 27.484375 10.78125 32.3125 \nQ 14.796875 37.15625 21.921875 38.8125 \nz\nM 18.3125 54.390625 \nQ 18.3125 48.734375 21.84375 45.5625 \nQ 25.390625 42.390625 31.78125 42.390625 \nQ 38.140625 42.390625 41.71875 45.5625 \nQ 45.3125 48.734375 45.3125 54.390625 \nQ 45.3125 60.0625 41.71875 63.234375 \nQ 38.140625 66.40625 31.78125 66.40625 \nQ 25.390625 66.40625 21.84375 63.234375 \nQ 18.3125 60.0625 18.3125 54.390625 \nz\n\" id=\"DejaVuSans-56\"/>\n      </defs>\n      <g transform=\"translate(20.878125 51.92993)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"159.033203\" xlink:href=\"#DejaVuSans-56\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"text_13\">\n     <!-- Density -->\n     <defs>\n      <path d=\"M 19.671875 64.796875 \nL 19.671875 8.109375 \nL 31.59375 8.109375 \nQ 46.6875 8.109375 53.6875 14.9375 \nQ 60.6875 21.78125 60.6875 36.53125 \nQ 60.6875 51.171875 53.6875 57.984375 \nQ 46.6875 64.796875 31.59375 64.796875 \nz\nM 9.8125 72.90625 \nL 30.078125 72.90625 \nQ 51.265625 72.90625 61.171875 64.09375 \nQ 71.09375 55.28125 71.09375 36.53125 \nQ 71.09375 17.671875 61.125 8.828125 \nQ 51.171875 0 30.078125 0 \nL 9.8125 0 \nz\n\" id=\"DejaVuSans-68\"/>\n      <path d=\"M 56.203125 29.59375 \nL 56.203125 25.203125 \nL 14.890625 25.203125 \nQ 15.484375 15.921875 20.484375 11.0625 \nQ 25.484375 6.203125 34.421875 6.203125 \nQ 39.59375 6.203125 44.453125 7.46875 \nQ 49.3125 8.734375 54.109375 11.28125 \nL 54.109375 2.78125 \nQ 49.265625 0.734375 44.1875 -0.34375 \nQ 39.109375 -1.421875 33.890625 -1.421875 \nQ 20.796875 -1.421875 13.15625 6.1875 \nQ 5.515625 13.8125 5.515625 26.8125 \nQ 5.515625 40.234375 12.765625 48.109375 \nQ 20.015625 56 32.328125 56 \nQ 43.359375 56 49.78125 48.890625 \nQ 56.203125 41.796875 56.203125 29.59375 \nz\nM 47.21875 32.234375 \nQ 47.125 39.59375 43.09375 43.984375 \nQ 39.0625 48.390625 32.421875 48.390625 \nQ 24.90625 48.390625 20.390625 44.140625 \nQ 15.875 39.890625 15.1875 32.171875 \nz\n\" id=\"DejaVuSans-101\"/>\n      <path d=\"M 54.890625 33.015625 \nL 54.890625 0 \nL 45.90625 0 \nL 45.90625 32.71875 \nQ 45.90625 40.484375 42.875 44.328125 \nQ 39.84375 48.1875 33.796875 48.1875 \nQ 26.515625 48.1875 22.3125 43.546875 \nQ 18.109375 38.921875 18.109375 30.90625 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.1875 \nQ 21.34375 51.125 25.703125 53.5625 \nQ 30.078125 56 35.796875 56 \nQ 45.21875 56 50.046875 50.171875 \nQ 54.890625 44.34375 54.890625 33.015625 \nz\n\" id=\"DejaVuSans-110\"/>\n      <path d=\"M 44.28125 53.078125 \nL 44.28125 44.578125 \nQ 40.484375 46.53125 36.375 47.5 \nQ 32.28125 48.484375 27.875 48.484375 \nQ 21.1875 48.484375 17.84375 46.4375 \nQ 14.5 44.390625 14.5 40.28125 \nQ 14.5 37.15625 16.890625 35.375 \nQ 19.28125 33.59375 26.515625 31.984375 \nL 29.59375 31.296875 \nQ 39.15625 29.25 43.1875 25.515625 \nQ 47.21875 21.78125 47.21875 15.09375 \nQ 47.21875 7.46875 41.1875 3.015625 \nQ 35.15625 -1.421875 24.609375 -1.421875 \nQ 20.21875 -1.421875 15.453125 -0.5625 \nQ 10.6875 0.296875 5.421875 2 \nL 5.421875 11.28125 \nQ 10.40625 8.6875 15.234375 7.390625 \nQ 20.0625 6.109375 24.8125 6.109375 \nQ 31.15625 6.109375 34.5625 8.28125 \nQ 37.984375 10.453125 37.984375 14.40625 \nQ 37.984375 18.0625 35.515625 20.015625 \nQ 33.0625 21.96875 24.703125 23.78125 \nL 21.578125 24.515625 \nQ 13.234375 26.265625 9.515625 29.90625 \nQ 5.8125 33.546875 5.8125 39.890625 \nQ 5.8125 47.609375 11.28125 51.796875 \nQ 16.75 56 26.8125 56 \nQ 31.78125 56 36.171875 55.265625 \nQ 40.578125 54.546875 44.28125 53.078125 \nz\n\" id=\"DejaVuSans-115\"/>\n      <path d=\"M 9.421875 54.6875 \nL 18.40625 54.6875 \nL 18.40625 0 \nL 9.421875 0 \nz\nM 9.421875 75.984375 \nL 18.40625 75.984375 \nL 18.40625 64.59375 \nL 9.421875 64.59375 \nz\n\" id=\"DejaVuSans-105\"/>\n      <path d=\"M 18.3125 70.21875 \nL 18.3125 54.6875 \nL 36.8125 54.6875 \nL 36.8125 47.703125 \nL 18.3125 47.703125 \nL 18.3125 18.015625 \nQ 18.3125 11.328125 20.140625 9.421875 \nQ 21.96875 7.515625 27.59375 7.515625 \nL 36.8125 7.515625 \nL 36.8125 0 \nL 27.59375 0 \nQ 17.1875 0 13.234375 3.875 \nQ 9.28125 7.765625 9.28125 18.015625 \nL 9.28125 47.703125 \nL 2.6875 47.703125 \nL 2.6875 54.6875 \nL 9.28125 54.6875 \nL 9.28125 70.21875 \nz\n\" id=\"DejaVuSans-116\"/>\n      <path d=\"M 32.171875 -5.078125 \nQ 28.375 -14.84375 24.75 -17.8125 \nQ 21.140625 -20.796875 15.09375 -20.796875 \nL 7.90625 -20.796875 \nL 7.90625 -13.28125 \nL 13.1875 -13.28125 \nQ 16.890625 -13.28125 18.9375 -11.515625 \nQ 21 -9.765625 23.484375 -3.21875 \nL 25.09375 0.875 \nL 2.984375 54.6875 \nL 12.5 54.6875 \nL 29.59375 11.921875 \nL 46.6875 54.6875 \nL 56.203125 54.6875 \nz\n\" id=\"DejaVuSans-121\"/>\n     </defs>\n     <g transform=\"translate(14.798438 150.046719)rotate(-90)scale(0.1 -0.1)\">\n      <use xlink:href=\"#DejaVuSans-68\"/>\n      <use x=\"77.001953\" xlink:href=\"#DejaVuSans-101\"/>\n      <use x=\"138.525391\" xlink:href=\"#DejaVuSans-110\"/>\n      <use x=\"201.904297\" xlink:href=\"#DejaVuSans-115\"/>\n      <use x=\"254.003906\" xlink:href=\"#DejaVuSans-105\"/>\n      <use x=\"281.787109\" xlink:href=\"#DejaVuSans-116\"/>\n      <use x=\"320.996094\" xlink:href=\"#DejaVuSans-121\"/>\n     </g>\n    </g>\n   </g>\n   <g id=\"line2d_13\">\n    <path clip-path=\"url(#pddad8ca8cc)\" d=\"M 65.361932 229.874489 \nL 128.123603 229.764413 \nL 131.170286 229.530981 \nL 133.607632 229.133702 \nL 135.74031 228.55458 \nL 137.56832 227.844033 \nL 139.39633 226.915695 \nL 141.529008 225.559106 \nL 143.966354 223.694119 \nL 147.013037 221.02675 \nL 150.059721 218.08952 \nL 152.192399 215.784047 \nL 154.020408 213.477624 \nL 155.54375 211.180441 \nL 157.067092 208.410403 \nL 158.285765 205.772641 \nL 159.809106 201.8619 \nL 161.332448 197.20376 \nL 162.855789 191.772599 \nL 164.683799 184.281953 \nL 166.816477 174.418714 \nL 169.86316 159.0504 \nL 175.956526 128.092211 \nL 186.315249 76.676775 \nL 190.275937 56.718426 \nL 192.103947 48.62788 \nL 193.627288 42.909434 \nL 194.845961 39.15895 \nL 196.064635 36.211872 \nL 196.978639 34.543022 \nL 197.892644 33.33359 \nL 198.806649 32.568668 \nL 199.415986 32.295064 \nL 200.025322 32.201761 \nL 200.634659 32.280675 \nL 201.243996 32.523535 \nL 202.158001 33.177218 \nL 203.072006 34.154012 \nL 203.98601 35.427232 \nL 205.204684 37.538884 \nL 206.728025 40.743182 \nL 208.556035 45.19502 \nL 218.610089 71.373079 \nL 220.133431 76.202158 \nL 221.656772 81.787577 \nL 223.180114 88.17817 \nL 225.008123 96.798103 \nL 227.750138 111.01235 \nL 232.929499 138.16534 \nL 235.671514 151.233364 \nL 238.108861 161.84036 \nL 240.546207 171.492112 \nL 242.678885 179.06366 \nL 244.506895 184.766478 \nL 246.030236 188.877659 \nL 247.553578 192.381014 \nL 249.07692 195.322582 \nL 250.904929 198.281238 \nL 253.951612 202.595524 \nL 257.302964 207.502897 \nL 260.349647 211.943147 \nL 261.872988 213.804305 \nL 263.091662 215.000581 \nL 264.310335 215.904443 \nL 265.529008 216.524642 \nL 266.747681 216.904303 \nL 268.271023 217.147511 \nL 271.927042 217.596535 \nL 273.450384 218.052459 \nL 274.973725 218.762178 \nL 276.497067 219.719247 \nL 278.629745 221.376795 \nL 283.809106 225.633123 \nL 285.637116 226.784019 \nL 287.465126 227.638695 \nL 289.293136 228.214027 \nL 291.425814 228.618026 \nL 294.777165 228.966438 \nL 305.135888 229.746365 \nL 310.924585 229.861418 \nL 332.251367 229.874489 \nL 369.725568 229.874489 \nL 369.725568 229.874489 \n\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n   </g>\n   <g id=\"patch_3\">\n    <path d=\"M 50.14375 239.758125 \nL 50.14375 22.318125 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_4\">\n    <path d=\"M 384.94375 239.758125 \nL 384.94375 22.318125 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_5\">\n    <path d=\"M 50.14375 239.758125 \nL 384.94375 239.758125 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_6\">\n    <path d=\"M 50.14375 22.318125 \nL 384.94375 22.318125 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"text_14\">\n    <!-- % difference in is_package between the two AB-groups -->\n    <defs>\n     <path d=\"M 72.703125 32.078125 \nQ 68.453125 32.078125 66.03125 28.46875 \nQ 63.625 24.859375 63.625 18.40625 \nQ 63.625 12.0625 66.03125 8.421875 \nQ 68.453125 4.78125 72.703125 4.78125 \nQ 76.859375 4.78125 79.265625 8.421875 \nQ 81.6875 12.0625 81.6875 18.40625 \nQ 81.6875 24.8125 79.265625 28.4375 \nQ 76.859375 32.078125 72.703125 32.078125 \nz\nM 72.703125 38.28125 \nQ 80.421875 38.28125 84.953125 32.90625 \nQ 89.5 27.546875 89.5 18.40625 \nQ 89.5 9.28125 84.9375 3.921875 \nQ 80.375 -1.421875 72.703125 -1.421875 \nQ 64.890625 -1.421875 60.34375 3.921875 \nQ 55.8125 9.28125 55.8125 18.40625 \nQ 55.8125 27.59375 60.375 32.9375 \nQ 64.9375 38.28125 72.703125 38.28125 \nz\nM 22.3125 68.015625 \nQ 18.109375 68.015625 15.6875 64.375 \nQ 13.28125 60.75 13.28125 54.390625 \nQ 13.28125 47.953125 15.671875 44.328125 \nQ 18.0625 40.71875 22.3125 40.71875 \nQ 26.5625 40.71875 28.96875 44.328125 \nQ 31.390625 47.953125 31.390625 54.390625 \nQ 31.390625 60.6875 28.953125 64.34375 \nQ 26.515625 68.015625 22.3125 68.015625 \nz\nM 66.40625 74.21875 \nL 74.21875 74.21875 \nL 28.609375 -1.421875 \nL 20.796875 -1.421875 \nz\nM 22.3125 74.21875 \nQ 30.03125 74.21875 34.609375 68.875 \nQ 39.203125 63.53125 39.203125 54.390625 \nQ 39.203125 45.171875 34.640625 39.84375 \nQ 30.078125 34.515625 22.3125 34.515625 \nQ 14.546875 34.515625 10.03125 39.859375 \nQ 5.515625 45.21875 5.515625 54.390625 \nQ 5.515625 63.484375 10.046875 68.84375 \nQ 14.59375 74.21875 22.3125 74.21875 \nz\n\" id=\"DejaVuSans-37\"/>\n     <path id=\"DejaVuSans-32\"/>\n     <path d=\"M 45.40625 46.390625 \nL 45.40625 75.984375 \nL 54.390625 75.984375 \nL 54.390625 0 \nL 45.40625 0 \nL 45.40625 8.203125 \nQ 42.578125 3.328125 38.25 0.953125 \nQ 33.9375 -1.421875 27.875 -1.421875 \nQ 17.96875 -1.421875 11.734375 6.484375 \nQ 5.515625 14.40625 5.515625 27.296875 \nQ 5.515625 40.1875 11.734375 48.09375 \nQ 17.96875 56 27.875 56 \nQ 33.9375 56 38.25 53.625 \nQ 42.578125 51.265625 45.40625 46.390625 \nz\nM 14.796875 27.296875 \nQ 14.796875 17.390625 18.875 11.75 \nQ 22.953125 6.109375 30.078125 6.109375 \nQ 37.203125 6.109375 41.296875 11.75 \nQ 45.40625 17.390625 45.40625 27.296875 \nQ 45.40625 37.203125 41.296875 42.84375 \nQ 37.203125 48.484375 30.078125 48.484375 \nQ 22.953125 48.484375 18.875 42.84375 \nQ 14.796875 37.203125 14.796875 27.296875 \nz\n\" id=\"DejaVuSans-100\"/>\n     <path d=\"M 37.109375 75.984375 \nL 37.109375 68.5 \nL 28.515625 68.5 \nQ 23.6875 68.5 21.796875 66.546875 \nQ 19.921875 64.59375 19.921875 59.515625 \nL 19.921875 54.6875 \nL 34.71875 54.6875 \nL 34.71875 47.703125 \nL 19.921875 47.703125 \nL 19.921875 0 \nL 10.890625 0 \nL 10.890625 47.703125 \nL 2.296875 47.703125 \nL 2.296875 54.6875 \nL 10.890625 54.6875 \nL 10.890625 58.5 \nQ 10.890625 67.625 15.140625 71.796875 \nQ 19.390625 75.984375 28.609375 75.984375 \nz\n\" id=\"DejaVuSans-102\"/>\n     <path d=\"M 41.109375 46.296875 \nQ 39.59375 47.171875 37.8125 47.578125 \nQ 36.03125 48 33.890625 48 \nQ 26.265625 48 22.1875 43.046875 \nQ 18.109375 38.09375 18.109375 28.8125 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.1875 \nQ 20.953125 51.171875 25.484375 53.578125 \nQ 30.03125 56 36.53125 56 \nQ 37.453125 56 38.578125 55.875 \nQ 39.703125 55.765625 41.0625 55.515625 \nz\n\" id=\"DejaVuSans-114\"/>\n     <path d=\"M 48.78125 52.59375 \nL 48.78125 44.1875 \nQ 44.96875 46.296875 41.140625 47.34375 \nQ 37.3125 48.390625 33.40625 48.390625 \nQ 24.65625 48.390625 19.8125 42.84375 \nQ 14.984375 37.3125 14.984375 27.296875 \nQ 14.984375 17.28125 19.8125 11.734375 \nQ 24.65625 6.203125 33.40625 6.203125 \nQ 37.3125 6.203125 41.140625 7.25 \nQ 44.96875 8.296875 48.78125 10.40625 \nL 48.78125 2.09375 \nQ 45.015625 0.34375 40.984375 -0.53125 \nQ 36.96875 -1.421875 32.421875 -1.421875 \nQ 20.0625 -1.421875 12.78125 6.34375 \nQ 5.515625 14.109375 5.515625 27.296875 \nQ 5.515625 40.671875 12.859375 48.328125 \nQ 20.21875 56 33.015625 56 \nQ 37.15625 56 41.109375 55.140625 \nQ 45.0625 54.296875 48.78125 52.59375 \nz\n\" id=\"DejaVuSans-99\"/>\n     <path d=\"M 50.984375 -16.609375 \nL 50.984375 -23.578125 \nL -0.984375 -23.578125 \nL -0.984375 -16.609375 \nz\n\" id=\"DejaVuSans-95\"/>\n     <path d=\"M 18.109375 8.203125 \nL 18.109375 -20.796875 \nL 9.078125 -20.796875 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.390625 \nQ 20.953125 51.265625 25.265625 53.625 \nQ 29.59375 56 35.59375 56 \nQ 45.5625 56 51.78125 48.09375 \nQ 58.015625 40.1875 58.015625 27.296875 \nQ 58.015625 14.40625 51.78125 6.484375 \nQ 45.5625 -1.421875 35.59375 -1.421875 \nQ 29.59375 -1.421875 25.265625 0.953125 \nQ 20.953125 3.328125 18.109375 8.203125 \nz\nM 48.6875 27.296875 \nQ 48.6875 37.203125 44.609375 42.84375 \nQ 40.53125 48.484375 33.40625 48.484375 \nQ 26.265625 48.484375 22.1875 42.84375 \nQ 18.109375 37.203125 18.109375 27.296875 \nQ 18.109375 17.390625 22.1875 11.75 \nQ 26.265625 6.109375 33.40625 6.109375 \nQ 40.53125 6.109375 44.609375 11.75 \nQ 48.6875 17.390625 48.6875 27.296875 \nz\n\" id=\"DejaVuSans-112\"/>\n     <path d=\"M 34.28125 27.484375 \nQ 23.390625 27.484375 19.1875 25 \nQ 14.984375 22.515625 14.984375 16.5 \nQ 14.984375 11.71875 18.140625 8.90625 \nQ 21.296875 6.109375 26.703125 6.109375 \nQ 34.1875 6.109375 38.703125 11.40625 \nQ 43.21875 16.703125 43.21875 25.484375 \nL 43.21875 27.484375 \nz\nM 52.203125 31.203125 \nL 52.203125 0 \nL 43.21875 0 \nL 43.21875 8.296875 \nQ 40.140625 3.328125 35.546875 0.953125 \nQ 30.953125 -1.421875 24.3125 -1.421875 \nQ 15.921875 -1.421875 10.953125 3.296875 \nQ 6 8.015625 6 15.921875 \nQ 6 25.140625 12.171875 29.828125 \nQ 18.359375 34.515625 30.609375 34.515625 \nL 43.21875 34.515625 \nL 43.21875 35.40625 \nQ 43.21875 41.609375 39.140625 45 \nQ 35.0625 48.390625 27.6875 48.390625 \nQ 23 48.390625 18.546875 47.265625 \nQ 14.109375 46.140625 10.015625 43.890625 \nL 10.015625 52.203125 \nQ 14.9375 54.109375 19.578125 55.046875 \nQ 24.21875 56 28.609375 56 \nQ 40.484375 56 46.34375 49.84375 \nQ 52.203125 43.703125 52.203125 31.203125 \nz\n\" id=\"DejaVuSans-97\"/>\n     <path d=\"M 9.078125 75.984375 \nL 18.109375 75.984375 \nL 18.109375 31.109375 \nL 44.921875 54.6875 \nL 56.390625 54.6875 \nL 27.390625 29.109375 \nL 57.625 0 \nL 45.90625 0 \nL 18.109375 26.703125 \nL 18.109375 0 \nL 9.078125 0 \nz\n\" id=\"DejaVuSans-107\"/>\n     <path d=\"M 45.40625 27.984375 \nQ 45.40625 37.75 41.375 43.109375 \nQ 37.359375 48.484375 30.078125 48.484375 \nQ 22.859375 48.484375 18.828125 43.109375 \nQ 14.796875 37.75 14.796875 27.984375 \nQ 14.796875 18.265625 18.828125 12.890625 \nQ 22.859375 7.515625 30.078125 7.515625 \nQ 37.359375 7.515625 41.375 12.890625 \nQ 45.40625 18.265625 45.40625 27.984375 \nz\nM 54.390625 6.78125 \nQ 54.390625 -7.171875 48.1875 -13.984375 \nQ 42 -20.796875 29.203125 -20.796875 \nQ 24.46875 -20.796875 20.265625 -20.09375 \nQ 16.0625 -19.390625 12.109375 -17.921875 \nL 12.109375 -9.1875 \nQ 16.0625 -11.328125 19.921875 -12.34375 \nQ 23.78125 -13.375 27.78125 -13.375 \nQ 36.625 -13.375 41.015625 -8.765625 \nQ 45.40625 -4.15625 45.40625 5.171875 \nL 45.40625 9.625 \nQ 42.625 4.78125 38.28125 2.390625 \nQ 33.9375 0 27.875 0 \nQ 17.828125 0 11.671875 7.65625 \nQ 5.515625 15.328125 5.515625 27.984375 \nQ 5.515625 40.671875 11.671875 48.328125 \nQ 17.828125 56 27.875 56 \nQ 33.9375 56 38.28125 53.609375 \nQ 42.625 51.21875 45.40625 46.390625 \nL 45.40625 54.6875 \nL 54.390625 54.6875 \nz\n\" id=\"DejaVuSans-103\"/>\n     <path d=\"M 48.6875 27.296875 \nQ 48.6875 37.203125 44.609375 42.84375 \nQ 40.53125 48.484375 33.40625 48.484375 \nQ 26.265625 48.484375 22.1875 42.84375 \nQ 18.109375 37.203125 18.109375 27.296875 \nQ 18.109375 17.390625 22.1875 11.75 \nQ 26.265625 6.109375 33.40625 6.109375 \nQ 40.53125 6.109375 44.609375 11.75 \nQ 48.6875 17.390625 48.6875 27.296875 \nz\nM 18.109375 46.390625 \nQ 20.953125 51.265625 25.265625 53.625 \nQ 29.59375 56 35.59375 56 \nQ 45.5625 56 51.78125 48.09375 \nQ 58.015625 40.1875 58.015625 27.296875 \nQ 58.015625 14.40625 51.78125 6.484375 \nQ 45.5625 -1.421875 35.59375 -1.421875 \nQ 29.59375 -1.421875 25.265625 0.953125 \nQ 20.953125 3.328125 18.109375 8.203125 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 75.984375 \nL 18.109375 75.984375 \nz\n\" id=\"DejaVuSans-98\"/>\n     <path d=\"M 4.203125 54.6875 \nL 13.1875 54.6875 \nL 24.421875 12.015625 \nL 35.59375 54.6875 \nL 46.1875 54.6875 \nL 57.421875 12.015625 \nL 68.609375 54.6875 \nL 77.59375 54.6875 \nL 63.28125 0 \nL 52.6875 0 \nL 40.921875 44.828125 \nL 29.109375 0 \nL 18.5 0 \nz\n\" id=\"DejaVuSans-119\"/>\n     <path d=\"M 54.890625 33.015625 \nL 54.890625 0 \nL 45.90625 0 \nL 45.90625 32.71875 \nQ 45.90625 40.484375 42.875 44.328125 \nQ 39.84375 48.1875 33.796875 48.1875 \nQ 26.515625 48.1875 22.3125 43.546875 \nQ 18.109375 38.921875 18.109375 30.90625 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 75.984375 \nL 18.109375 75.984375 \nL 18.109375 46.1875 \nQ 21.34375 51.125 25.703125 53.5625 \nQ 30.078125 56 35.796875 56 \nQ 45.21875 56 50.046875 50.171875 \nQ 54.890625 44.34375 54.890625 33.015625 \nz\n\" id=\"DejaVuSans-104\"/>\n     <path d=\"M 30.609375 48.390625 \nQ 23.390625 48.390625 19.1875 42.75 \nQ 14.984375 37.109375 14.984375 27.296875 \nQ 14.984375 17.484375 19.15625 11.84375 \nQ 23.34375 6.203125 30.609375 6.203125 \nQ 37.796875 6.203125 41.984375 11.859375 \nQ 46.1875 17.53125 46.1875 27.296875 \nQ 46.1875 37.015625 41.984375 42.703125 \nQ 37.796875 48.390625 30.609375 48.390625 \nz\nM 30.609375 56 \nQ 42.328125 56 49.015625 48.375 \nQ 55.71875 40.765625 55.71875 27.296875 \nQ 55.71875 13.875 49.015625 6.21875 \nQ 42.328125 -1.421875 30.609375 -1.421875 \nQ 18.84375 -1.421875 12.171875 6.21875 \nQ 5.515625 13.875 5.515625 27.296875 \nQ 5.515625 40.765625 12.171875 48.375 \nQ 18.84375 56 30.609375 56 \nz\n\" id=\"DejaVuSans-111\"/>\n     <path d=\"M 34.1875 63.1875 \nL 20.796875 26.90625 \nL 47.609375 26.90625 \nz\nM 28.609375 72.90625 \nL 39.796875 72.90625 \nL 67.578125 0 \nL 57.328125 0 \nL 50.6875 18.703125 \nL 17.828125 18.703125 \nL 11.1875 0 \nL 0.78125 0 \nz\n\" id=\"DejaVuSans-65\"/>\n     <path d=\"M 19.671875 34.8125 \nL 19.671875 8.109375 \nL 35.5 8.109375 \nQ 43.453125 8.109375 47.28125 11.40625 \nQ 51.125 14.703125 51.125 21.484375 \nQ 51.125 28.328125 47.28125 31.5625 \nQ 43.453125 34.8125 35.5 34.8125 \nz\nM 19.671875 64.796875 \nL 19.671875 42.828125 \nL 34.28125 42.828125 \nQ 41.5 42.828125 45.03125 45.53125 \nQ 48.578125 48.25 48.578125 53.8125 \nQ 48.578125 59.328125 45.03125 62.0625 \nQ 41.5 64.796875 34.28125 64.796875 \nz\nM 9.8125 72.90625 \nL 35.015625 72.90625 \nQ 46.296875 72.90625 52.390625 68.21875 \nQ 58.5 63.53125 58.5 54.890625 \nQ 58.5 48.1875 55.375 44.234375 \nQ 52.25 40.28125 46.1875 39.3125 \nQ 53.46875 37.75 57.5 32.78125 \nQ 61.53125 27.828125 61.53125 20.40625 \nQ 61.53125 10.640625 54.890625 5.3125 \nQ 48.25 0 35.984375 0 \nL 9.8125 0 \nz\n\" id=\"DejaVuSans-66\"/>\n     <path d=\"M 4.890625 31.390625 \nL 31.203125 31.390625 \nL 31.203125 23.390625 \nL 4.890625 23.390625 \nz\n\" id=\"DejaVuSans-45\"/>\n     <path d=\"M 8.5 21.578125 \nL 8.5 54.6875 \nL 17.484375 54.6875 \nL 17.484375 21.921875 \nQ 17.484375 14.15625 20.5 10.265625 \nQ 23.53125 6.390625 29.59375 6.390625 \nQ 36.859375 6.390625 41.078125 11.03125 \nQ 45.3125 15.671875 45.3125 23.6875 \nL 45.3125 54.6875 \nL 54.296875 54.6875 \nL 54.296875 0 \nL 45.3125 0 \nL 45.3125 8.40625 \nQ 42.046875 3.421875 37.71875 1 \nQ 33.40625 -1.421875 27.6875 -1.421875 \nQ 18.265625 -1.421875 13.375 4.4375 \nQ 8.5 10.296875 8.5 21.578125 \nz\nM 31.109375 56 \nz\n\" id=\"DejaVuSans-117\"/>\n    </defs>\n    <g transform=\"translate(52.03375 16.318125)scale(0.12 -0.12)\">\n     <use xlink:href=\"#DejaVuSans-37\"/>\n     <use x=\"95.019531\" xlink:href=\"#DejaVuSans-32\"/>\n     <use x=\"126.806641\" xlink:href=\"#DejaVuSans-100\"/>\n     <use x=\"190.283203\" xlink:href=\"#DejaVuSans-105\"/>\n     <use x=\"218.066406\" xlink:href=\"#DejaVuSans-102\"/>\n     <use x=\"253.271484\" xlink:href=\"#DejaVuSans-102\"/>\n     <use x=\"288.476562\" xlink:href=\"#DejaVuSans-101\"/>\n     <use x=\"350\" xlink:href=\"#DejaVuSans-114\"/>\n     <use x=\"388.863281\" xlink:href=\"#DejaVuSans-101\"/>\n     <use x=\"450.386719\" xlink:href=\"#DejaVuSans-110\"/>\n     <use x=\"513.765625\" xlink:href=\"#DejaVuSans-99\"/>\n     <use x=\"568.746094\" xlink:href=\"#DejaVuSans-101\"/>\n     <use x=\"630.269531\" xlink:href=\"#DejaVuSans-32\"/>\n     <use x=\"662.056641\" xlink:href=\"#DejaVuSans-105\"/>\n     <use x=\"689.839844\" xlink:href=\"#DejaVuSans-110\"/>\n     <use x=\"753.21875\" xlink:href=\"#DejaVuSans-32\"/>\n     <use x=\"785.005859\" xlink:href=\"#DejaVuSans-105\"/>\n     <use x=\"812.789062\" xlink:href=\"#DejaVuSans-115\"/>\n     <use x=\"864.888672\" xlink:href=\"#DejaVuSans-95\"/>\n     <use x=\"914.888672\" xlink:href=\"#DejaVuSans-112\"/>\n     <use x=\"978.365234\" xlink:href=\"#DejaVuSans-97\"/>\n     <use x=\"1039.644531\" xlink:href=\"#DejaVuSans-99\"/>\n     <use x=\"1094.625\" xlink:href=\"#DejaVuSans-107\"/>\n     <use x=\"1150.785156\" xlink:href=\"#DejaVuSans-97\"/>\n     <use x=\"1212.064453\" xlink:href=\"#DejaVuSans-103\"/>\n     <use x=\"1275.541016\" xlink:href=\"#DejaVuSans-101\"/>\n     <use x=\"1337.064453\" xlink:href=\"#DejaVuSans-32\"/>\n     <use x=\"1368.851562\" xlink:href=\"#DejaVuSans-98\"/>\n     <use x=\"1432.328125\" xlink:href=\"#DejaVuSans-101\"/>\n     <use x=\"1493.851562\" xlink:href=\"#DejaVuSans-116\"/>\n     <use x=\"1533.060547\" xlink:href=\"#DejaVuSans-119\"/>\n     <use x=\"1614.847656\" xlink:href=\"#DejaVuSans-101\"/>\n     <use x=\"1676.371094\" xlink:href=\"#DejaVuSans-101\"/>\n     <use x=\"1737.894531\" xlink:href=\"#DejaVuSans-110\"/>\n     <use x=\"1801.273438\" xlink:href=\"#DejaVuSans-32\"/>\n     <use x=\"1833.060547\" xlink:href=\"#DejaVuSans-116\"/>\n     <use x=\"1872.269531\" xlink:href=\"#DejaVuSans-104\"/>\n     <use x=\"1935.648438\" xlink:href=\"#DejaVuSans-101\"/>\n     <use x=\"1997.171875\" xlink:href=\"#DejaVuSans-32\"/>\n     <use x=\"2028.958984\" xlink:href=\"#DejaVuSans-116\"/>\n     <use x=\"2068.167969\" xlink:href=\"#DejaVuSans-119\"/>\n     <use x=\"2149.955078\" xlink:href=\"#DejaVuSans-111\"/>\n     <use x=\"2211.136719\" xlink:href=\"#DejaVuSans-32\"/>\n     <use x=\"2242.923828\" xlink:href=\"#DejaVuSans-65\"/>\n     <use x=\"2311.332031\" xlink:href=\"#DejaVuSans-66\"/>\n     <use x=\"2379.935547\" xlink:href=\"#DejaVuSans-45\"/>\n     <use x=\"2416.019531\" xlink:href=\"#DejaVuSans-103\"/>\n     <use x=\"2479.496094\" xlink:href=\"#DejaVuSans-114\"/>\n     <use x=\"2518.359375\" xlink:href=\"#DejaVuSans-111\"/>\n     <use x=\"2579.541016\" xlink:href=\"#DejaVuSans-117\"/>\n     <use x=\"2642.919922\" xlink:href=\"#DejaVuSans-112\"/>\n     <use x=\"2706.396484\" xlink:href=\"#DejaVuSans-115\"/>\n    </g>\n   </g>\n  </g>\n </g>\n <defs>\n  <clipPath id=\"pddad8ca8cc\">\n   <rect height=\"217.44\" width=\"334.8\" x=\"50.14375\" y=\"22.318125\"/>\n  </clipPath>\n </defs>\n</svg>\n",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "source": [
    "# Adding a column with the % difference between the two AB-groups\n",
    "boot_1d['diff'] = (boot_1d[0] - boot_1d[1])/boot_1d[1]*100\n",
    "\n",
    "# Ploting the bootstrap % difference\n",
    "ax = boot_1d['diff'].plot(kind='density')\n",
    "ax.set_title('% difference in is_package between the two AB-groups')\n",
    "\n",
    "# Calculating the probability that 1-day retention is greater when the gate is at level 30\n",
    "print('Probability that click/booking is worse when use mobile connection:',(boot_1d['diff'] > 0).mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.Now suppose you find out the “most” important feature (rank one), select a sample of at least 5000 customers from the test_hotel dataset, (by a random seed number) with the identified important feature to conduct a AB test on the important feature. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Algorithm 3. Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "[[ 8.21629007e-07 -2.38016031e-08 -3.87654684e-06 -8.91557022e-07\n  -3.29758219e-04 -5.46764157e-06  9.99999941e-01 -5.60263298e-09\n  -1.46703443e-08 -2.16380087e-08 -1.17986540e-08 -4.62434248e-10\n   1.59481111e-09  9.51595228e-05  2.79412459e-08  1.74764611e-08\n   1.52132292e-06 -5.97959298e-06 -2.14273804e-08 -3.29803669e-09]\n [-1.13304245e-05  1.72890551e-06  4.35512243e-04  1.61252587e-03\n   9.99992160e-01  2.50244434e-03  3.29532903e-04  2.80268606e-08\n   3.48915374e-07  5.86749143e-06  4.43587327e-07  3.93050030e-07\n  -1.21451799e-09  2.53635464e-03  1.62655501e-07  5.30020654e-07\n  -3.08393141e-05  2.91459039e-04  7.95698481e-10 -1.00168648e-06]\n [ 3.14990743e-05 -8.58670882e-07  4.62366328e-05  4.06337268e-04\n  -2.52759365e-03 -4.19580668e-03 -9.59907283e-05 -2.48223838e-07\n  -5.76601361e-06  5.39319276e-07  3.40814605e-07 -5.54906594e-07\n   5.13912314e-07  9.99980305e-01  8.51478541e-05  4.03625848e-06\n   2.72951755e-04  3.89058425e-03 -3.83230434e-07  1.63357645e-06]\n [-9.96444885e-04  7.72244139e-05  1.40641917e-03  7.87020651e-03\n  -2.52364361e-03  9.99913974e-01  4.19063578e-06 -6.07106726e-06\n   3.51334028e-06  4.35050214e-05 -2.90210968e-06 -1.08697636e-05\n  -3.93941637e-06  4.21914177e-03 -5.14410881e-06  1.37078676e-04\n   2.61670760e-03 -8.72288544e-03  1.49953186e-05 -3.21916302e-05]\n [-1.73726963e-03  8.54184366e-05  2.15401189e-03  2.19731232e-02\n  -3.39305280e-04  8.55317758e-03  6.30650071e-06  4.97755864e-06\n  -2.24924783e-06  3.97378853e-05  1.04163081e-05  2.31501609e-06\n  -1.69067930e-06 -3.86405781e-03 -1.91391921e-05 -2.83674164e-04\n   2.17114640e-03  9.99708216e-01 -2.13711270e-07 -2.78865119e-05]]\nloaded train\nloaded test\nfilled NA\n(48252, 100)\npicked top 5\n(48252, 5)\n[[2 4 3 1 0]\n [2 4 3 1 0]\n [2 4 3 1 0]\n ...\n [2 4 3 1 0]\n [2 4 3 1 0]\n [2 0 4 3 1]]\n[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23\n 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47\n 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95\n 96 97 98 99]\nGenerate submission...\n0\nGenerated submission\n"
    }
   ],
   "source": [
    "pca = np.matrix(\"\"\"8.21629007e-07  -2.38016031e-08  -3.87654684e-06  -8.91557022e-07\n",
    "   -3.29758219e-04  -5.46764157e-06   9.99999941e-01  -5.60263298e-09\n",
    "   -1.46703443e-08  -2.16380087e-08  -1.17986540e-08  -4.62434248e-10\n",
    "    1.59481111e-09   9.51595228e-05   2.79412459e-08   1.74764611e-08\n",
    "    1.52132292e-06  -5.97959298e-06  -2.14273804e-08  -3.29803669e-09;\n",
    "   -1.13304245e-05   1.72890551e-06   4.35512243e-04   1.61252587e-03\n",
    "    9.99992160e-01   2.50244434e-03   3.29532903e-04   2.80268606e-08\n",
    "    3.48915374e-07   5.86749143e-06   4.43587327e-07   3.93050030e-07\n",
    "   -1.21451799e-09   2.53635464e-03   1.62655501e-07   5.30020654e-07\n",
    "   -3.08393141e-05   2.91459039e-04   7.95698481e-10  -1.00168648e-06;\n",
    "    3.14990743e-05  -8.58670882e-07   4.62366328e-05   4.06337268e-04\n",
    "   -2.52759365e-03  -4.19580668e-03  -9.59907283e-05  -2.48223838e-07\n",
    "   -5.76601361e-06   5.39319276e-07   3.40814605e-07  -5.54906594e-07\n",
    "    5.13912314e-07   9.99980305e-01   8.51478541e-05   4.03625848e-06\n",
    "    2.72951755e-04   3.89058425e-03  -3.83230434e-07   1.63357645e-06;\n",
    "   -9.96444885e-04   7.72244139e-05   1.40641917e-03   7.87020651e-03\n",
    "   -2.52364361e-03   9.99913974e-01   4.19063578e-06  -6.07106726e-06\n",
    "    3.51334028e-06   4.35050214e-05  -2.90210968e-06  -1.08697636e-05\n",
    "   -3.93941637e-06   4.21914177e-03  -5.14410881e-06   1.37078676e-04\n",
    "    2.61670760e-03  -8.72288544e-03   1.49953186e-05  -3.21916302e-05;\n",
    "    -1.73726963e-03   8.54184366e-05   2.15401189e-03   2.19731232e-02\n",
    "   -3.39305280e-04   8.55317758e-03   6.30650071e-06   4.97755864e-06\n",
    "   -2.24924783e-06   3.97378853e-05   1.04163081e-05   2.31501609e-06\n",
    "   -1.69067930e-06  -3.86405781e-03  -1.91391921e-05  -2.83674164e-04\n",
    "    2.17114640e-03   9.99708216e-01  -2.13711270e-07  -2.78865119e-05\"\"\")\n",
    "\n",
    "print(pca)\n",
    "# print(pca.shape)\n",
    "from sklearn import linear_model\n",
    "\n",
    "clf = linear_model.SGDClassifier(loss=\"log\")\n",
    "trains = pd.read_csv(\"./train_hotel.csv\", chunksize=3000000)\n",
    "\n",
    "for train in trains:\n",
    "    print(\"loaded train\")\n",
    "    clusters = train.hotel_cluster\n",
    "    train[\"book_year\"] = np.where(train['srch_ci'].isnull(), pd.to_numeric(train['date_time'].str[:4]), pd.to_numeric(train['srch_ci'].str[:4]))\n",
    "    train[\"book_month\"] = np.where(train['srch_ci'].isnull(), pd.to_numeric(train['date_time'].str[5:7]), pd.to_numeric(train['srch_ci'].str[5:7]))\n",
    "\n",
    "    training = train.drop([\"hotel_cluster\", \"date_time\", \"srch_ci\", \"srch_co\", \"is_booking\", \"cnt\"], 1)\n",
    "\n",
    "    training.fillna(0, inplace=True)\n",
    "    \n",
    "    # print(training.columns.to_series().groupby(training.dtypes).groups)\n",
    "    \n",
    "    training = np.dot(training, pca.T)\n",
    "\n",
    "    clf.partial_fit(training, clusters, classes=list(range(100)))\n",
    "test = pd.read_csv(\"./test_hotel.csv\")\n",
    "print(\"loaded test\")\n",
    "test[\"book_year\"] = (np.where(test['srch_ci'].isnull(), pd.to_numeric(test['date_time'].str[:4]), pd.to_numeric(test['srch_ci'].str[:4])))\n",
    "test[\"book_month\"] = (np.where(test['srch_ci'].isnull(), pd.to_numeric(test['date_time'].str[5:7]), pd.to_numeric(test['srch_ci'].str[5:7])))\n",
    "\n",
    "test = test.drop([\"date_time\", \"srch_ci\", \"srch_co\", \"user_id\", \"hotel_country\", \"hotel_market\"], 1)\n",
    "test.dropna(0, inplace=True)\n",
    "test = np.dot(test, pca.T)\n",
    "\n",
    "\n",
    "# training.fillna(0, inplace=True)\n",
    "# test.dropna(0, inplace=True)\n",
    "# test.fill(test.any(null))\n",
    "\n",
    "print(\"filled NA\")\n",
    "\n",
    "y_pred = clf.predict_log_proba(test)\n",
    "\n",
    "top5 = clf.classes_[np.fliplr(np.argsort(y_pred[:,-5:]))]\n",
    "print(y_pred.shape)\n",
    "print(\"picked top 5\")\n",
    "print(top5.shape)\n",
    "print(top5)\n",
    "print(clf.classes_)\n",
    "\n",
    "import datetime\n",
    "now = datetime.datetime.now()\n",
    "path = 'submission_' + str(now.strftime(\"%Y-%m-%d-%H-%M\")) + '.csv'\n",
    "out = open(path, \"w\")\n",
    "index = 0\n",
    "out.write(\"id, hotel_cluster\\n\")\n",
    "for row in y_pred:\n",
    "    if (index % 1000000 == 0):\n",
    "        print(index)\n",
    "    out.write(str(index))\n",
    "    out.write(\",\")\n",
    "    out.write(\" \".join(str(x) for x in row))\n",
    "    # out.write(str(row))\n",
    "    out.write(\"\\n\")\n",
    "    index += 1\n",
    "print(\"Logistic Regression Finished\")\n",
    "\n",
    "\n",
    "y_pred = clf.predict_log_proba(test)\n",
    "print(y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define training and testing sets\n",
    "\n",
    "train_df = pd.read_csv('./train_hotel.csv', usecols=['hotel_cluster'])\n",
    "\n",
    "# Construct dest_clusters dictionary\n",
    "\n",
    "from collections import defaultdict\n",
    "from csv import DictReader\n",
    "\n",
    "dest_clusters = defaultdict(lambda: defaultdict(int))\n",
    "\n",
    "for i, row in enumerate(DictReader(open(\"./train_hotel.csv\"))):\n",
    "    \n",
    "    # for every destiantion, increment it's hotel_cluster by 1\n",
    "    dest_clusters[row[\"srch_destination_id\"]][row[\"hotel_cluster\"]] += 1\n",
    "    \n",
    "    \n",
    "# Create Submission\n",
    "\n",
    "def get_top_clusters(d, l=5):\n",
    "    return \" \".join(str(x) for x in sorted(d, key=d.get, reverse=True)[:l])\n",
    "\n",
    "# ferq_cluster_default: the most frequent hotel clusters\n",
    "ferq_cluster_default = defaultdict(int, train_df['hotel_cluster'].value_counts()[:5])\n",
    "\n",
    "with open(\"expedia.csv\", \"w\") as outfile:\n",
    "    outfile.write(\"id,hotel_cluster\\n\")\n",
    "    \n",
    "    for i, row in enumerate(DictReader(open(\"./test.csv\"))):\n",
    "        \n",
    "        row_id = row[\"id\"]\n",
    "        \n",
    "        # freq_cluster_d:    the frequency of all hotel clusters for a destiantion\n",
    "        freq_cluster_d       = dest_clusters[row[\"srch_destination_id\"]]\n",
    "\n",
    "        if(len(freq_cluster_d) >= 5):\n",
    "            outfile.write(\"{},{}\\n\".format(row_id, get_top_clusters(freq_cluster_d)))\n",
    "        elif(len(freq_cluster_d) < 5 and len(freq_cluster_d) > 0):\n",
    "            top_str = get_top_clusters(freq_cluster_d, len(freq_cluster_d))\n",
    "            top_str = top_str + \" \" + get_top_clusters(ferq_cluster_default, 5 - len(freq_cluster_d))\n",
    "            outfile.write(\"{},{}\\n\".format(row_id, top_str))\n",
    "        else:\n",
    "            outfile.write(\"{},{}\\n\".format(row_id, get_top_clusters(ferq_cluster_default)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Algorithm 4. XGBoosting"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Already implemeted A/B test in Bootstrap Part(you can find it in `Algorithm 2. Bootstrap`). Please refer to those codes and explainations."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.2-final"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}